Wordで差し込み印刷するVBAについて | |
---|---|
[196052] Wordで差し込み印刷するVBAについて- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ 610 -(2023/12/19(22:28)) □U R L/ ExcelVBAで質問です。 Excel側「フォーム」シートの表でB3セル以下の当日日付が入っている行のみWord(a.docx)へ差し込み印刷して、A列に日時と処理済と入力するコードを作成しているのですが、印刷は出るのですが、当日日付の行ではなく、保存されているWordのデータしか印刷されません。 どうしたら、当日日付が入っている行のみWordへ差し込み印刷出来るようになるか、ご教示頂けないでしょうか。 =============== 'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub Sashikomi_Insatsu() 'プログラム2|変数設定 Dim i As Long, k As Long Dim waitTime As Variant Dim targetRow As Range 'プログラム3|シート設定 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("フォーム") 'プログラム4|エクセルの最終行と最右列を取得 Dim cmax As Long, cnt As Long cmax = Range("A65536").End(xlUp).Row cnt = Range("IV1").End(xlToLeft).Column 'プログラム5|ワード起動 Dim wdapp As Word.Application Set wdapp = CreateObject("Word.application") wdapp.Visible = True 'プログラム6|テンプレートワードのパス取得 Dim path As String path = ThisWorkbook.path & "\a.docx" 'プログラム7|エクセルのデータを1行ずつ処理 For i = 3 To cmax ' データを含む行を取得 Set targetRow = ws.Rows(i) ' 当日日付が含まれているか確認 If Application.WorksheetFunction.CountIf(targetRow, "=" & Format(Date, "yyyy/mm/dd")) > 0 Then ' プログラム8|テンプレートワードを開く Dim wdDoc As Word.Document Set wdDoc = wdapp.Documents.Open(path) waitTime = Now + TimeValue("0:00:03") Application.Wait waitTime 'プログラム9|テンプレートワードにエクセルデータを挿入 For k = 0 To cnt - 2 With wdDoc.Content.Find .Text = ws.Range("B3").Offset(0, k).Value .Forward = True .Replacement.Text = ws.Range("B" & i).Offset(0, k).Value .Wrap = wdFindContinue .MatchFuzzy = True .Execute Replace:=wdReplaceAll End With Next ' プログラム10|データを差し込んだワードを印刷 wdDoc.PrintOut ' プログラム12|テンプレートワードを保存せずに閉じる wdDoc.Close SaveChanges:=False 'プログラム13|オブジェクト解放 Set wdDoc = Nothing 'プログラム14|エクセルにデータを出力 ws.Range("A" & i).Value = Now & "処理済" End If Next 'プログラム15|ワードをアプリケーションごと閉じる wdapp.Quit Set wdapp = Nothing 'プログラム16|プログラム終了 End Sub =============== この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[196053] Re[1]: Wordで差し込み印刷するVBAについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/20(19:27)) □U R L/ > .Text = ws.Range("B3").Offset(0, k).Value ↑ ここの「3」がおかしい。 差し込むべきタイトル(例:[氏名])が入っている行番号に合わせる。 例:タイトルが1行目にあるなら→ .Text = ws.Range("B1").Offset(0, k).Value |
[196054] Re[2]: Wordで差し込み印刷するVBAについて- ■ / 記事引用/メール受信=OFF■ □投稿者/ 610 -(2023/12/21(20:00)) □U R L/ 半平太さん ご確認ありがとうございます。 ご指摘の点、「1」に修正しても、状況は変わりませんでした。 <補足> Excelフォームシートの項目は下記のとおりです。 A1完了日時,B1INDEX,C1,送信日付,D1送信時間,G1支店コード,H1受付番号,I1組合員,J1行番号1,K1問選択,L1注文番号1,M1コメント,N1理由,O1行番号2,P1問選択2,Q1注文番号2,R1コメント2,S理由2,T1行番号3,U1問選択3,V1注文番号3,W1コメント3,X1理由3,Y1備考 ・B〜Xが差し込み印刷対象 ・AYは差し込み印刷対象外 ・EFは非表示 ・1〜2列目は差し込み印刷対象外 ・Z1にボタンを配置し、ボタン押下で「Sashikomi_Insatsu」 が実行され、特にエラーも出ません。 Wordを起動し、手動での差し込み印刷は正常に動作します。 イミディエイトウィンドウで変数を確認すると、プログラム9の部分で当日日付のデータが表示されるので、コマンドとしては正しい動きをしていそうです。(何かコマンドが足りない?orWord側の問題?) あとは保存されているWordのデータしか印刷されない事がヒントにならないでしょうか。 申し訳ございませんが、ご確認のほどよろしくお願い致します。 |
[196055] Re[3]: Wordで差し込み印刷するVBAについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/21(20:55)) □U R L/ >A1完了日時,B1INDEX,C1,送信日付,D1送信時間,G1支店コード,H1受付番号,I1組合員,J1行番号1,K1問選択,・・ そちらのコードの元ネタはこれですよね? ↓ >エクセルマクロVBAでWord連携!ワード操作して差し込み印刷(コード付) その解説によると、エクセルの表題は[]括弧で囲むことになっています。 C1[送信日付],D1[送信時間],・・・ となっていないとおかしい。 また、Word文書も >差し込みしたい箇所を以下のように、[xxx]と入力しています。 つまり、[姓][名]様 ・・・ と言った様に、エクセルのタイトルと同じ文言は、 同じ様に[]括弧で囲んでいる必要があります。 チャントそうなる様にお膳立てしていますか? |
[196056] Re[4]: Wordで差し込み印刷するVBAについて- ■記事引用/メール受信=OFF■ □投稿者/ とおりすがり -(2023/12/22(00:43)) □U R L/ 仕組みを全く理解していないようだ。 素直にWordの差し込み印刷機能を使ったほうがいい。 日本語の説明がネット上にたくさんあります。 当日日付だけに限定するなら、直接シートにオートフィルタを掛けて それだけを抽出したものを使えばいいだけです。 |
[196061] Re[5]: Wordで差し込み印刷するVBAについて- ■ / 記事引用/メール受信=OFF■ □投稿者/ 610 -(2023/12/25(05:36)) □U R L/ 半平太さん ご確認ありがとうございます。 > そちらのコードの元ネタはこれですよね? ↓ > >エクセルマクロVBAでWord連携!ワード操作して差し込み印刷(コード付) そうです。 ご指摘のエクセルの表題を[]括弧で囲み、Word側の差し込みフィールド<[INDEX]>や<[送信日付]>に修正し、 リンクするようにすることで、当日日付の行が印刷されるようになりました。 ありがとうございました。 ・・・が、印刷されたものを見ると<1>や<2023/12/25>等と、すべての差し込み印刷対象に<>括弧が付いており、見た目がおかしいです。 Word側の差し込みフィールドが<[INDEX]>や<[送信日付]>の<>括弧を消し、[INDEX]や[送信日付]という表記にして保存しても、次に開いたときにはなぜか あと一歩のところまで来ているのですが、再度ご教示を頂けないでしょうか。 |
[196062] Re[5]: Wordで差し込み印刷するVBAについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/25(08:30)) □U R L/ >次に開いたときにはなぜかや<送信日付>に戻ってしまいます。 不思議ですね。もし、その < > 括弧が普通の文字でしたら・・ 1.エクセルの表題を[]括弧で囲むのは止め、<>括弧だけで囲むことにする。 2.Word側の差し込みフィールドは、ありのままにする。 すなわち、元の < > だけにしておく。 それだけで、正常化すると思われます。 |
[196065] Re[6]: Wordで差し込み印刷するVBAについて- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2023/12/25(15:21)) □U R L/ >Wordを起動し、手動での差し込み印刷は正常に動作します。 そうであれば、 ・エクセルで、1列追加 [印刷]:=IF(A2=Today(),1,"") ・ワードで、アドレス帳の編集」のフィルターで、[印刷]が1のみに設定 これで、マクロを使う必要がなくなると思うのですが… マクロを使うのであれば、すべての差し込みフィールドを削除して 単なる[]括弧付きの文字列にすると置換できるのでないでしょうか。 |
このトピックに書きこむ |
---|