以前紹介しました「【Word VBA】差し込み印刷でレコード毎に別ファイルで保存」を少し修正してみました。
doc形式でファイルを保存する:こちらもCHECK
-
【Word VBA】差し込み印刷でレコード毎に別ファイルで保存
関連記事(docx形式でファイルを保存します): 【コード】差し込み印刷でレコード毎に別ファイルで保存(その2) 関連記事(チェックしたレコードのみ処理対象にします): 【コード】差し込み印刷でレコー ...
上記の記事では、ファイルの保存形式がWord 2003までの.doc形式でした。
これを、.docx形式にしたいということです。
<目次>
このマクロでできること
差し込み印刷用のメイン文書に宛先のリスト(Excelファイルなど)が設定されている状態でマクロを実行します。
すると、このリストに掲載されたレコードをすべて差し込んだファイルが作成されます。
ファイルの保存形式を、Word 2007以降の.docx形式にします。
マクロの解説
.docx形式での保存なので、赤文字のように拡張子を変更しました。
それと同時に、フォーマットを43行目のように変更しました。
.docx形式のファイルは、XML形式のファイルなのです。
ここを、wdFormatDocument (.doc形式)のままにしておくと、拡張子(.docx)と整合がとれないためエラーになります。
マクロ
Sub 差し込み印刷_レコード毎に別ファイルで保存2() Dim i As Integer Dim iMax As Integer Dim myName As String Dim myMainDoc As Document Dim myNewDoc As Document Set myMainDoc = ActiveDocument With myMainDoc.MailMerge 'レコード数の設定 .DataSource.ActiveRecord = wdLastRecord iMax = .DataSource.ActiveRecord '新規文書に書き出す .Destination = wdSendToNewDocument '空白の差し込みフィールドを印刷しない .SuppressBlankLines = True For i = 1 To iMax 'レコードの指定 With .DataSource .FirstRecord = i .LastRecord = i .ActiveRecord = i End With '文書作成(差し込みエラー時に停止) .Execute Pause:=True 'ファイル名に用いる文字列(項目名を設定してください) myName = .DataSource.DataFields("名前").Value '新規文書に名前をつけて保存 Set myNewDoc = ActiveDocument If myName <> "" Then myNewDoc.SaveAs FileName:=myMainDoc.Path & "\" & _ myName & ".docx", _ FileFormat:=wdFormatXMLDocument, _ AddToRecentFiles:=False myNewDoc.Close End If DoEvents Next i End With Set myMainDoc = Nothing Set myNewDoc = Nothing End Sub
さらに改良
以下の記事では、別ファイルに保存する対象を絞り込めるようにしました。
チェックしたレコードのみ処理対象:こちらもCHECK
-
【Word VBA】差し込み印刷でレコード毎に別ファイルで保存するWordマクロ(その3)
これまでに、「【コード】差し込み印刷でレコード毎に別ファイルで保存」と「【コード】差し込み印刷でレコード毎に別ファイルで保存(その2)」を紹介してきました。 今回の改良で、チェックしたレコードのみを処 ...