Document.SaveAs2メソッドでドキュメントを量産する(Word)
[Document].SaveAs2メソッドでドキュメントを量産する(Word)
同じ内容のドキュメントを、名前だけ変えて量産したい。
準備
まず、元になるドキュメント(笑)を準備する。
こいつを、ファイル名を変えて別のフォルダに保存する。
フォルダ構成は、
こんな感じ。
Mass-ProductDocuments.docm
が、今回司令塔になるドキュメント。
Products
フォルダは、名前を変えて保存するときの保存先。大量生産したときは、ここに新たにできたドキュメントがたまってゆく。
SrcDocument
フォルダには、大量生産するための元のドキュメントを入れておく。
ちなみに、中身は
このとおり。SrcDocument.docx
というドキュメントが入っている。(上の「元になるドキュメント(笑)」のことね。)
ドキュメントを開き、別名で指定したフォルダに保存するマクロ
とりあえず、次の動作をするコードを書く。
- 元になるドキュメント(笑)を開く
- ファイル名を作る
- 作ったファイル名で別フォルダに保存する
これだけ。
リスト1
Private Sub test00() Const SRC_FOLDER As String = "\SrcDocument\" '" Const SRC_FILE_NAME As String = "SrcDocument.docx" Const SAVE_FOLDER As String = "\Products\" '" 'テンプレート用ファイルのフルパス組み立て' Dim srcPath As String srcPath = ThisDocument.Path & SRC_FOLDER & SRC_FILE_NAME '保存先フォルダパス' Dim saveDir As String saveDir = ThisDocument.Path & SAVE_FOLDER 'ファイル名の部品を取得’ '"" Dim psnNum As String psnNum = Format(2, "0#") '番号' Dim sectName As String sectName = "明訓" '所属' Dim psnName As String psnName = "山田 太郎" '名前' 'ファイル名組み立て' Dim flName As String flName = psnNum & psnName & "@" & sectName & ".docx" 'テンプレート用ファイルを開く' Dim templateDoc As Word.Document Set templateDoc = Word.Documents.Open(srcPath) '名前を付けて保存' Call templateDoc.SaveAs2(saveDir & flName) '閉じる' Call templateDoc.Close(SaveChanges:=False) End Sub
コードについては、コメントをごらんください。
リスト内の「'ファイル名の部品を取得'」のところは、今回はそれぞれ決め打ちにしているが、量産体制に入るときには、ファイル名用の部品をテキストファイルから取得するようにすればよい。
たとえば、テキストファイルに、1件あたり1行になるように、上の例でいうと「番号」、「所属」、「名前」をタブ区切りでデータを作成しておけば、1行分のテキストをSplit
で配列にしてやることで、ファイル名の作成に必要なデータを得ることができる。
あと、「名前を付けて保存」以下のところ。
SaveAs2
メソッドを実行した時点で、元の「SrcDocument.docx
」は、「02山田 太郎@明訓.docx
」になってしまう。(手作業のときと同じである。)
で、変数templateDoc
が指し示しているのも「02山田 太郎@明訓.docx
」になる。
したがって、最後の
Call templateDoc.Close(SaveChanges:=False)
を実行すると、「02山田 太郎@明訓.docx
」が閉じられ、後には司令塔の「Mass-ProductDocuments.docm
」だけが取り残される。
「SrcDocument.docx
」が開いたままになる、ということはない。
実行後
Products
フォルダの中身は、
このとおり。ちゃんと保存されている。
こいつを開くと、
当然、内容は元の「SrcDocument.docx
」と同じである。
おわりに
あとは、ファイル名のもとになるデータを用意して、ループさせれば大量生産が可能。
また、新しくできたドキュメントに、ちょっと手を加えて保存、ということもできる。
様式を大量生産して配布するときに便利です。