gooブログはじめました!

Excelマクロ で Wordドキュメント を 操作。②

◯ 差し込み文書や連続印刷を実現。後編

複数のドキュメントを連続印刷してみよう!

 前編の、お知らせ作成マクロで作成した複数の「お知らせドキュメント」を、連続して印刷するマクロに挑戦してみましょう。サンプルでは印刷するドキュメントが5つなので、手作業と比べてそれほど効率化した感じがしません。でも、これが何十ファイルというボリュームになってくると、マクロなしでは手に負えないはずです。

 それでは早速、作っていきましょう。標準モジュールに、続けて、次のコードを記述してください(リスト2)。

リスト2●複数のドキュメントを連続印刷するコード
リスト2、複数のドキュメントを連続印刷するコード。

 「連続印刷」という名前のプロシージャを作成しました。このプロシージャを実行すると、サンプルブックと同じフォルダーにあるWordのドキュメントファイルで、ファイル名の先頭が「K」のファイルのみを開いて印刷処理を実行します。処理は、該当するすべてのファイルに対して、連続で実行されます。

 (1)と(2)では先ほどのマクロと同様に、Wordのオブジェクトを作成し変数wrdに格納したあと、作成したWordのオブジェクトを表示します。

 (3)で、サンプルブックと同じフォルダー内のすべてのWordドキュメントのファイル名を取得します。Dir関数は、引数に指定したファイルが見つかったとき、そのファイル名を返します。ここではDir関数の引数に「ThisWorkbook.Path & "¥*.docx"」といったように、ワイルドカードを使用しています。これは、サンプルブックと同じフォルダー内にある、拡張子が「docx」のファイル名をすべて返す、という指定になります。もし1つ以上のファイルが見つかったときは、最初に見つかったファイル名が変数fnに格納されます。

 (4)のDo…Loopステートメントでは、「Whilefn <> ""」といったように、変数fnが空でない間は処理を繰り返すという終了条件が指定されています。

 (5)のIfステートメントの条件式「Left(fn,1) = "K"」で、ファイル名の左から1文字が「K」のときのみ、(6)~(8)の処理を行います。こうすることで、お知らせ作成プロシージャで作成したドキュメントのみを、印刷の対象にします。

 (6)で、最初に見つかったドキュメントを開きます。

 (7)で、ドキュメント(wrd.ActiveDocument)を印刷(PrintOut)します。印刷したらすぐに、(8)のCloseメソッドで閉じます。

 (9)で、次のファイル名を取得します。「fn = Dir()」とDir関数の引数を省略したとき、(2)で指定したパスにある2つ目のファイル名を、変数fnに格納します。以降は繰り返し処理で、3つ目、4つ目…とファイル名を返し、すべてのファイル名を返し終えたら、空の文字列を返します。空の文字列が返されると、(4)の終了条件を満たすので、繰り返し処理を終了します。

 繰り返し処理を終了したら、(10)でWordを終了し、(11)で「連続印刷が終了しました」のメッセージを表示して、コードを終了します。

 では実際に、コードを実行して動作を確認してみましょう。サンプルブックと同じフォルダーには、先ほどのお知らせ作成マクロで作成した5つのドキュメントと有効期限.docx、つまり6つのドキュメントが保存されていることとします。

 「マクロ」ダイアログボックスを表示し、「マクロ名」の一覧から「連続印刷」マクロを選択し、「実行」ボタンをクリックします。なお、このマクロを実行すると、実際に印刷処理が行われるので注意してください。

 マクロが正常に実行されると、「連続印刷が終了しました」のメッセージが表示されるので、「OK」ボタンをクリックします。

 6つのドキュメントの中で、有効期限.docxを除く5つのドキュメントが連続して印刷されました。確認してください(図6)。

図6●5つのドキュメントが連続印刷された
図6、5つのドキュメントが連続印刷された。」
 
(イラスト:武藤 玄)
                                                   (イラスト:武藤 玄)
 
ヒント ページを指定して印刷するには !

 複数のページを持つドキュメントに対して、PrintOutメソッドを引数の指定なしに実行すると、ドキュメントのすべてのページが印刷されます。そのようなドキュメントで印刷するページを指定して実行したいときは、引数の指定を行います。

 リスト2の(7)の箇所を例に記述すると、次のようになります。

 

 1つ目の引数Rangeには、ページ指定印刷を意味する「Range:=4」を指定しています。2つ目の引数Pagesには、開始ページと終了ページを「1-3」のように「-」(ハイフン)を使って指定します。この指定で、1ページから3ページの範囲を印刷します。

 複数ページを指定するときは「1,3」のように「,」(カンマ)を使って指定します。この指定で、1ページと3ページを印刷します。

複数のドキュメントを連結して1つのドキュメントにしよう!

 では最後に、お知らせ作成マクロで作成した5つのお知らせドキュメントを、連結して1つのドキュメントにするマクロに挑戦してみましょう。複数のドキュメントを連結して1つの大きなドキュメントにまとめたいというニーズは、ビジネスシーンでよく見受けられます。

 それでは早速、作っていきましょう。標準モジュールに、続けて、次のコードを記述してください(リスト3)。

リスト3●複数のドキュメントを連結して1つのドキュメントにするコード
リスト3、複数のドキュメントを連結して1つのドキュメントにするコード。

 「文書連結」という名前のプロシージャを作成しました。このプロシージャを実行すると、サンプルブックと同じフォルダー内にある、ファイル名の先頭が「K」のドキュメントファイルを連結して、1つの新しいドキュメントを作成し、表示します。

 (1)でWordのオブジェクトを作成して変数wrdに格納し、(2)でWordオブジェクトのAddメソッドを使用して新規のドキュメントを作成します。

 (3)では、サンプルブックと同じフォルダー内にある、拡張子が「docx」のファイル(つまり、すべてのドキュメントファイル)の名前を取得し、変数fnに格納します。

 (4)のDo…Loopステートメントは、「While fn <>""」というように、変数fnが空でない間は処理を繰り返すのでしたね。

 (5)のIfステートメントの条件式「Left(fn, 1) = "K"」で、ファイル名の左から1文字が「K」のときのみ、(6)~(8)の処理を行います。先ほどと同様、お知らせ作成プロシージャで作成したドキュメントのみを、連結処理の対象にします。

 (6)で、新規ドキュメントにお知らせドキュメントを挿入(InsertFile)します。挿入する順序は、(3)でファイルが見つかった順になります。

 次に(7)で、セクション区切りを挿入(InsertBreak)します。新しいセクションは、次のページからになります。

 さらに(8)で、選択範囲を解除(Collapse)し、カーソルを終了方向に移動します。

 (9)で、2つ目のファイル名を取得します。「fn = Dir()」とDir関数の引数を省略したときは、見つかったすべてのファイル名を返すのでしたね。

 これら(4)~(9)の処理を、対象となるすべてのドキュメントに繰り返すことで、新規のドキュメントに、既存のドキュメントを連結していきます。

 ドキュメントの連結が終わると、(10)で「文書の連結が終了しました」のメッセージを表示します。

 連結した新規ドキュメントは、この後の作業で使用するはずですから、(11)でWordで見えるようにして、(12)でアクティブにします。最後に(13)でオブジェクトへの参照を解除し、コードを終了します。

 では実際に、コードを実行して動作を確認してみましょう。サンプルブックと同じフォルダーには、先ほどと同様に5つのお知らせドキュメントと有効期限.docxが保存されていることとします。

 「マクロ」ダイアログボックスを表示し、「マクロ名」の一覧から「文書連結」マクロを選択し、「実行」ボタンをクリックします。

 マクロが正常に実行されると、「文書の連結が終了しました」のメッセージが表示されるので、「OK」ボタンをクリックします。

 「OK」ボタンをクリックすると、有効期限.docxを除く5つのドキュメントが連結された、新規ドキュメントが表示されます。WordのウィンドウがExcelのウィンドウの背後に隠れて見えないときは、タスクバーにあるWordのタスクバーボタンをクリックしてください。表示された新規ドキュメントに、「K0001.docx」「K0003.docx」「K0005.docx」「K0008.docx」「K0009.docx」の5つのドキュメントが連結されていることを確認してください(図7)。

図7●ドキュメントを連結した、新規ドキュメントが作成された
図7、ドキュメントを連結した、新規ドキュメントが作成された。

 今回のマクロ、いかがでしたでしょうか? 現在、多くの企業では、標準のワープロソフトとしてWordが採用されています。Excelが表計算ソフトの王様なら、Wordはワープロソフトの王様です。そして、WordのようなOfficeファミリーのアプリケーションは、ExcelVBAとの相性がバッチリです。このExcelとWordをマクロで組み合わせて自動化することで、毎日の事務作業を大幅に効率化することが可能です。今回のマクロを参考に、ぜひチャレンジしてくださいね!

(イラスト:武藤 玄)
                                                       (イラスト:武藤 玄)

ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「〝 たぬき の 「 スマホ & パソコン 」 ワールド 〟」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事