素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。普段、仕事で差込印刷をよく使うんだが、「レコードごとに別々のファイルにしてくんねーかなー」と思っていた。PDFにする1ページづつバラすそれぞれにファイル名をつけるというおっそろしくメンドクサイことをしていたが(まあ、他の人が1個づつファイルを作っているのに比べたらそれでもだいぶ効率的なんですけど)、ggりまくって次のページにたどり着いた。参考サイト1「みんなのワードマクロ」様。コチラのサンプルコードは、差込印刷のレコードごとに新しいドキュメントを生成していく、というもの。いうのが欲しかったんだよ!という言葉しかございません。差込印刷がMailMergeオブジェクトを使うんだなんて、いったいどうやってたどり着いたんだろ?ただただすげえな、と思うばかり。参考サイト2VBA界では超有名な「インストラクターのネタ帳」様。コチラのページからは、アクティブなページを削除するというワザを拝借しました。標準モジュールのコードほとんど丸ごといただいたみたいなコードですが、めちゃ便利なので載っけときます。'フォルダ名を変えたらここを変えること。"」を、このファイルのあるディレクトリに作成しました。"エラーが発生しました。差込設定を見直すなど、設定を再確認してください。Subコードの説明(1)は、よくやるやつ。新しくできるファイルを保存するフォルダの有無を調べて、なかったら作る。(2)は、元のWordドキュメントを格納する変数。(3)は、新しくできるドキュメントを格納する変数。(4)で、マクロを書いているこのドキュメントを変数baseDocに格納。(5)で、変数maxRecにレコード数を格納。MailMerge.DataSourceオブジェクトのRecordCountプロパティから取得できる。(6)で、MailMergeオブジェクトのDestinationプロパティに定数wdSendToNewDocumentをセットしている。この定数をセットすると、とにかくこういうことになるらしいよ。(7)で、レコード数ぶんForループ。DataSourceオブジェクトのActiveRecord、FirstRecord、LastRecordの全てに同じ数字をセットすることで、1レコード1文書にしているのだと思う。分からんのだが、ここにDoEventsを入れていなかったら、ひたすら白紙文書がレコード数ぶん生産される。(10)で、新しくできるドキュメントのファイル名を作成。DataField(フィールド名)オブジェクトのValueプロパティを使えば、当該レコードのフィールドの文字列を呼んでくることができる。(11)で、最初のページを削除している。理屈が分からんのだが。Bookmarksコレクションってのがあるんでしょうな。(12)では、SaveAsメソッドを用いて新しくできたドキュメント(「定型書簡○○」って名前になっている)に名前を付けて保存している。差込データソースはこんな風に作っておいた。差込フィールドは、ドキュメントの2ページ目に、こんな風に設定。Subこんな風にコードを書いておく。保存用フォルダが作られて、こんな風にファイルが作られる。試しに一つ開いてみると、こんな感じ。おわりにほとんど借り物みたいなコードですが、めちゃくちゃ便利で重宝しております。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。