差し込み印刷で個別のファイルに差し込む方法

Pocket

Wordの差し込み印刷で「個々のドキュメントの編集」を選択すると新規文書が作成されますが、複数のレコードの場合も一つの文書ファイルに保存されます。

「1つの文書に保存され、文書の各コピーは改ページで区切られます。」

つまりレコード毎に別のファイルにすることができません。

そこで別のファイルに連続して保存するマクロを考えました。
次の通りです。

Sub 連続個別保存()
  recnumfirst = InputBox("最初のレコード番号", "最初のレコード番号")
  If recnumfirst = "" Then Exit Sub
  recnumlast = InputBox("最後のレコード番号", "最後のレコード番号")
  If recnumlast = "" Then Exit Sub
  For num = recnumfirst To recnumlast
    Call 個別保存(num)
  Next num
End Sub
Function 個別保存(num)
  Const savedir = "C:\Data"'保存するフォルダ
  '差込実行、Wordファイルを作成
  With ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
      .FirstRecord = num
      .LastRecord = num
    End With
    .Execute
  End With
  '作成されたWordファイルを保存
  fn = savedir & num & ".doc"
  ActiveDocument.SaveAs FileName:=fn, FileFormat:=wdFormatDocument
  ActiveWindow.Close
End Function

後半の「個別保存」ではレコード番号を一つ指定して差し込みを実行、出来たファイルを保存します。2行目のフォルダを必要に応じて書き換えてください。
前半の「連続個別保存」ではレコード番号の範囲を指定して「個別保存」を連続して実行させます。

Word2007で動作を確認しました。

追記
改良版について書きましたので、そちらもあわせてお読みください。
You Look Too Cool » 差し込み印刷で個別のファイルに差し込む方法-改良版

[ 2010年3月18日 | カテゴリー: Word | タグ: , ]

« | »

コメント

  1. shizu より:

    いつも参考にさせていただいてます。
    私はまったくの初心者です。

    「作成されたファイル名」の部分ですが、データソースの10番目のフィールドをファイル名にしたいので、
    別のサイトで見つけたものと合体させ、

    fn = .DataSource.DataFields(10).Value & “.doc” 

    としてみたのですがうまくいきません。

    ご教授願いたいのですがよろしくお願いします。

  2. stabucky より:

    >shizuさん
    コメントありがとうございます。
    GWはパソコンのない環境で過ごしていましたので返事が遅くなり申し訳ありません。

    手元にある環境ではWordマクロが使えなかったので間違っていたらごめんなさい。
    ご質問の「fn = .DataSource.DataFields(10).Value & “.doc”」ですが
    本文に書いたコードの
    「With ActiveDocument.MailMerge」と(2番目の)「End With」の間に書く必要があると思います。
    いかがでしょうか。
    「.Execute」の上に書くと良さそうな気がします。

    追記
    古いパソコンを起動してやってみました。一応、動きました。
    ただし、上の書き方では常に一つ目のレコードを拾ってしまうようです。
    つまり、どれも同じファイル名になってしまうので、最後のファイルだけが保存されます。
    これでは意味がないですよね。役立たずで申し訳ありません。

    なお差し込んだ後の文面から情報を取得する方法があります。
    http://stabucky.com/wp/archives/1037
    に書いてあるのですが、「何番目の段落」というように指定して文字列を取得できます。
    実際に私はこの方法を使って差込印刷時のファイル名に当てはめたことがあります。

  3. shizu より:

    お忙しいところ動作確認までしていただいてありがとうございました(^o^)
    「何番目の段落」・・・の取得方法については試してみたいと思います。

    今後も楽しみに拝見させていただきますね!

  4. stabucky より:

    >shizuさん
    お役に立てず申し訳ありませんでした。
    また面白い方法を見つけたら書きますので、よろしくお願いします。

  5. A-Fe より:

    参考にさせていただきました。

    上の方のご指摘通り、印刷したい行のレコードを取得していなかったようなので、修正して使わせていただきました。
    .DataSource.ActiveRecordの設定が肝だと思うので、その上のFirstRecordなどの指定は不要かとも
    思いますが、外して検証していないので、ご参考まで報告いたします。

    あと、最後のActiveWindowでのCloseだと、元ファイルがクローズしてしまったので、
    こちらもActiveDocumentをCloseする形にして利用させていただきました。

    With ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = num
    .LastRecord = num
    End With
    .DataSource.ActiveRecord = num

    Filename = .DataSource.DataFields.Item(“****”)

    .Execute
    End With

    ‘作成されたWordファイルを保存
    fn = savedir & Filename & “.doc”
    ActiveDocument.SaveAs Filename:=fn, FileFormat:=wdFormatDocument
    ‘ ActiveWindow.Close
    ActiveDocument.Close

  6. stabucky より:

    コメント、ありがとうございます。
    重要な手法を二つ教えていただきました。
    アクティブなレコードを指定する方法とフィールドの内容を取得する方法です。
    これらについては、もう少し整理してまた記事にまとめたいと思います。

  7. […] 前に差し込み印刷で個別のファイルに差し込む方法という記事を書いたのですが、A-Feさんから上手い方法を教えていただいたので、後半部分のコードを少し書き換えてみました。 Function 個別保存(num)     Const savedir = "D:Data"     '差込実行、Wordファイルを作成    With ActiveDocument.MailMerge         .Destination = wdSendToNewDocument         .SuppressBlankLines = True         .DataSource.ActiveRecord = num         fn = .DataSource.DataFields.Item([フィールド名])         .Execute     End With     '作成されたWordファイルを保存    ActiveDocument.SaveAs FileName:=savedir & fn, FileFormat:=wdFormatDocument     ActiveWindow.Close End Function […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報