第2回 差し込み印刷用文書と差し込みデータの準備
前回
の続きです。
差し込み印刷用文書と、文書に差し込むデータを準備し、差し込み印刷の設定を行います。
目次
差し込み印刷用文書の準備
「Word マクロ有効文書(*.docm)」形式の文書を作成する
まずは、差し込み印刷用文書を準備します。
あとでVBAのコードを仕込むことになるので、当然保存形式は「Word マクロ有効文書(*.docm)」です。
画像では、sample\差し込み印刷
というフォルダの中にsample.docm
という文書を作成しています。
1ページ目にコマンドボタンを配置する
まずは、文書の1ページ目にマクロ起動用のコマンドボタンを配置します。
前提として「開発」タブが表示されていなくてはいけません。
「開発」タブが非表示になっている人は、「ファイル」タブの「オプション」で表示させておきましょう。
「開発」タブの表示のさせ方をご存じない方は、「Word 開発タブ」あたりのキーワードでググってやればたちどころに解決すると思います。
では、コマンドボタンを追加していきましょう。
コマンド ボタンの追加
「開発」タブ、「コントロール」グループの「以前のバージョンのツール」アイコンをクリックします。
「コマンド ボタン(Active X コントロール)」アイコンをクリックします。
文書のカーソル位置(insertion point)にコマンド ボタン(このような要素を「コントロール(controle)」と呼びます。)が追加されました。
ここで、「コントロール」グループのところで「デザイン モード」のところがオンになっていることに注意してください。
コマンド ボタンのテキスト編集
コマンド ボタンを右クリックし、「オブジェクト」→「編集」の順にクリックします。
これで、コマンド ボタンに表示されるテキストを編集することができます。
ちなみに、右クリックが効くのは「デザイン モード」がオンのときだけです。
このコマンドボタンにマクロを登録する、という設定は後ほど行います。
Excelだと非常に簡単な操作ですが、Wordの場合は少し事情が異なります。
1ページ目には、コマンド ボタンだけ置いておけば良いので、Ctrl + Enterでページ区切りを入れておきましょう。
2ページ目に差し込み文書の本体を作成する
では、差し込み文書の本体を入力しましょう。
……といっても、画像のように入力しているだけです。
今回は、「」の中にデータを差し込む仕様なので、ひとまず「」だけ入力しておきます。
この後、差し込み用データを作成し、差し込み用文書(=現在作成中のsample.docm
)と差し込み用データファイルを接続してから、「」の中に〝差し込みフィールド〟(=データを闘魂注入するための場所)を設定することになります。
これで、一旦Word側の準備は一段落です。
差し込みデータの準備
差し込みデータ用Excelファイルの作成
こんどは、Word文書に差し込むためのデータを用意します。
差し込みデータファイルはどこに保存しても良いのですが、今回は差し込み文書(sample.docm
)と同じフォルダに置くこととします。
ファイル名は、別に何でも良いのですが、画像では、data-source.xlsx
としています。
データ入力
今回は、3件だけデータ(笑)を入力しています。
シート名はデフォルトの「Sheet1
」のままでも良いのですが、画像では「src-data
」としています。
単に差し込み印刷用文書(sanple.docm
)の「」に闘魂注入するだけなら1列だけで良いのですが、出来上がった差し込み後の文書のファイル名を連番にするために「ID
」という列を作成しています。
これで、差し込みデータもできました。上書き保存してdata-source.xlsx
を閉じておきましょう。
次は、差し込み印刷用文書(sample.docx
)と差し込みデータ(data-source.xlsx
のsrc-data
シートに作成した表)とを接続し、差し込みデータを闘魂注入するための〝差し込みフィールド〟を差し込み印刷用文書(sample.docm
)に設定します。
差し込み印刷の設定
再度、差し込み印刷用文書(sample.docm
)に戻ります。
差し込み印刷用文書と差し込みデータの接続
まず、差し込み印刷用文書(sample.docm
)と差し込みデータ(data-source.xlsx
のsrc-data
シートに作成した表)を接続します。
「差し込み文書」タブ、「差し込み印刷の開始」グループにある「宛先の選択」アイコン→「既存のリストを使用」の順にクリックします。
今回のプロジェクトの場合、差し込み用データ(のリスト)、すなわちdata-source.xlsx
のsrc-data
シートに作成した表は既に作成して存在しているので、「既存のリスト」を選択するわけです。
「宛先」ということばが出てくるのは、そもそもこの機能が葉書や封書の宛先部分の差し込みのための機能だからなのでしょう。
さて、「既存のリスト」をクリックすると、
このように、いきなりわけのわからないフォルダからファイルを選択するよう促されます。
よく見ると、My Data Sources
というフォルダ名なので、Officeの中の人的には「データソースはここに保存してね!」ということなのでしょう。
ただ、今回のプロジェクトでは、差し込み印刷用文書(sample.docm
)と同じフォルダに差し込みデータ用Excelファイル(data-source.xlsx
)を保存しているのですから、
慌てず騒がず...\sample\差し込み印刷
フォルダに移動して、data-source.xlsx
を選択し、「開く」をクリックしましょう。
すると、裏で差し込み印刷用文書(sample.docm
)と差し込みデータ用Excelファイル(data-source.xlsx
)が接続され、
こんどは、差し込みデータ用Excelファイルのどこにデータがあるのか、指定するよう促されます。
ダイアログボックスのタイトルが「テーブルの選択」となっています。
テーブルとは〝表〟のことです。
差し込みデータ用Excelファイル(data-source.xlsx
)では、「src-data
」シートに表=テーブルの形式でデータ(笑)を作成している(参考)ので、「src-data$
」を選択し、「OK」をクリックします。
先に作成した表では、先頭行を項目ラベルにしていたので、「先頭行をタイトル行として使用する」にチェックを入れてあります。(デフォルトでチェックが入っています。)
これで、差し込み印刷用文書と差し込みデータの接続は完了です。
さきほどまでグレーアウトされていた「文章入力とフィールドの挿入」グループのアイコンの多くがアクティブ化されています。
文書とデータソースとの接続が確立したため、これらの機能が使用可能になった、ということです。
差し込みフィールドの挿入
では、文書内にデータ(笑)を差し込む場所、すなわち差し込みフィールドを挿入します。
データ(笑)を差し込みたい箇所にカーソルを置いて、「差し込み文書」タブの「差し込みフィールドの挿入」をクリックします。
すると、差し込みデータ用テーブル(表)の列(カラム column)のリストが展開するので、差し込みたいデータ(笑)の列名を選択します。
今回のプロジェクトでは、「Phrase
」列のデータ(笑)を「」の中に差し込みたいので、「Phrase
」を選択します。
このように、差し込みフィールドが「」の中に挿入されました。
ちなみに、「文章入力とフィールドの挿入」グループの「結果のプレビュー」をクリックしてオンにすると、
このように、データ(笑)を差し込んだ結果をプレビューすることができます。
画像は1つ目のレコードを表示しています。
このように、他のレコードを差し込んだときの結果をプレビューすることができます。
実務で差し込み印刷機能を使う場合、差し込むデータの文字数によっては、レイアウトが崩れることがあるので、この機能を使って事前に確認しておくと良いでしょう。
これで差し込み印刷の設定は完了です。上書き保存をしておきましょう。
保存用フォルダの準備
最後に、データ(笑)を差し込んで新たに生まれた文書を保存するためのフォルダを作っておきます。
フォルダ名は何でも良いのですが、画像では「★作成した文書
」としています。
おわりに
これで準備は完了です。時は来た!
次回はいよいよマクロの解説です。
関連記事
補足1 マクロのソースコード
いちおう、マクロのソースコードを先に載っけておきます。
本記事と同じように設定していれば、sample.docm
に標準モジュールを挿入し、次のコードをコピペしてやれば実行は可能です。
ただし、コマンド ボタンとの紐付けはまだなので、コマンド ボタンをクリックしても何も起こりません。動作確認の際は、直接マクロを実行してください。
リスト1
Option Explicit
Const FOLDER_NAME As String = "★作成した文書" 'フォルダ名を変えたらここを変えること。'
Public Sub ExportMailMergeDocuments()
If Dir(ThisDocument.Path & "\" & FOLDER_NAME, vbDirectory) = "" Then
Call MkDir(ThisDocument.Path & "\" & FOLDER_NAME)
Call MsgBox( _
Prompt:="作成済みファイルを保存するフォルダ「" & FOLDER_NAME & _
"」を、このファイルのあるディレクトリに作成しました。", _
Buttons:=vbInformation, _
Title:="お知らせ" _
)
End If
Dim folderPath As String
folderPath = ThisDocument.Path & "\" & FOLDER_NAME & "\"
Dim srcDoc As Document
Dim newDoc As Document
Set srcDoc = ThisDocument
On Error GoTo HandleError
With srcDoc.MailMerge
Dim maxRec As Long
maxRec = .DataSource.RecordCount
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
Dim i As Long
For i = 1 To maxRec
With .DataSource
.ActiveRecord = i
.FirstRecord = i
.LastRecord = i
End With
Call .Execute(Pause:=True)
DoEvents
Set newDoc = ActiveDocument
Dim tgtFileName As String
tgtFileName = "諸葛亮曰く_" & Format(.DataSource.DataFields("ID").Value, "00")
If tgtFileName <> "" Then
With newDoc
' 文書末尾の余分なセクション区切りを削除
Dim lastSection As Section
Set lastSection = .Sections(.Sections.Count)
If lastSection.Range.Start = .Content.End - 1 Then
Call lastSection.Range.Previous(Unit:=wdCharacter, Count:=1).Delete
End If
' 1ページ目を削除
Call newDoc.Range(0, 0).Select
Call newDoc.Bookmarks("\Page").Range.Delete
Call newDoc.SaveAs( _
FileName:=folderPath & tgtFileName & ".docx", _
fileformat:=wdFormatXMLDocument, _
addtorecentfiles:=False)
Call newDoc.Close(SaveChanges:=False)
End With
End If
DoEvents
Next
End With
Set srcDoc = Nothing
Set newDoc = Nothing
Exit Sub
HandleError:
Call MsgBox( _
Prompt:="エラーが発生しました。差込設定を見直すなど、設定を再確認してください。", _
Buttons:=vbExclamation, _
Title:="エラー!" _
)
End Sub
補足2 差し込み印刷用文書オープン時のアラートについて
差し込み印刷の設定を施したあと、文書(今回の場合sample.docm
)を再度開こうとすると、
このようなアラートが表示されます。
曰く、
この文書を開くと、次のSQLコマンドが実行されます。
SELECT * FROM `'src-data$'`
データベースからのデータが、文書に挿入されます。続行しますか?
これは、次のようなことを言っています。
この文書を開くと、次のSQLコマンドが実行されます。
「SQL」とは、Structured Query Language
の略で、データベースに命令を出すための言語のことです。
今回のプロジェクトでは、既にWordの文書(sample.docm
)にデータベース(もどき)であるExcelファイル(source-data.xlsx
)を接続しているので、Wordが
この文書に接続されているデータベース(もどき)に命令を出していいっすかね?
と確認している、というわけです。
SELECT * FROM `'src-data$'`
SELECT * FROM `'src-data$'`
これが、SQLの命令文です。
'src-data$'
という名前の表(テーブル)から、全部の列(*
)のデータを取り出しなさい。
と言っています。
データベースからのデータが、文書に挿入されます。続行しますか?
これは、
文書オープン時に、接続されているデータベース(もどき)であるExcelファイル(data-source.xlsx
)にSQLの命令を出し、テーブル(「src-data
」シートの表)からデータを取り出して文書に挿入するよ。いいかい?
と言っています。
ここで「はい」をクリックすると、Excelから取り出したデータが闘魂注入された状態で文書が開かれるので、差し込み印刷機能が使える、というわけです。