戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
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について-

    迷宮入りorほかあたって見ます・・ / 記事引用/メール受信=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について-

    迷宮入りorほかあたって見ます・・ / 記事引用/メール受信=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のみに設定

      これで、マクロを使う必要がなくなると思うのですが…

      マクロを使うのであれば、すべての差し込みフィールドを削除して
      単なる[]括弧付きの文字列にすると置換できるのでないでしょうか。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G