Document.SaveAs2メソッドでドキュメントを量産する(Word)

[Document].SaveAs2メソッドでドキュメントを量産する(Word)

同じ内容のドキュメントを、名前だけ変えて量産したい。

準備

まず、元になるドキュメント(笑)を準備する。

f:id:akashi_keirin:20210905214752p:plain

こいつを、ファイル名を変えて別のフォルダに保存する。

フォルダ構成は、

f:id:akashi_keirin:20210905214756p:plain

こんな感じ。

Mass-ProductDocuments.docmが、今回司令塔になるドキュメント。

Productsフォルダは、名前を変えて保存するときの保存先。大量生産したときは、ここに新たにできたドキュメントがたまってゆく。

SrcDocumentフォルダには、大量生産するための元のドキュメントを入れておく。

ちなみに、中身は

f:id:akashi_keirin:20210905214759p:plain

このとおり。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フォルダの中身は、

f:id:akashi_keirin:20210905214801p:plain

このとおり。ちゃんと保存されている。

こいつを開くと、

f:id:akashi_keirin:20210905214805p:plain

当然、内容は元の「SrcDocument.docx」と同じである。

おわりに

あとは、ファイル名のもとになるデータを用意して、ループさせれば大量生産が可能。

また、新しくできたドキュメントに、ちょっと手を加えて保存、ということもできる。

様式を大量生産して配布するときに便利です。