如何在 Word 中,將合併列印的結果以每一筆資料儲存為一個檔案?
在 Word 中的預設值,合併列印可以輸出一整份文件檔,無法一筆記錄儲存為一個檔案。本次,求助於 ChatGPT。
指令:如何將 Word 的合併列印結果,產生每一筆資料以一個檔案儲存。
複製程式如下:
Sub SaveMergeResultsAsIndividualFiles()
Dim docMain As Document, docSingle As Document
Dim i As Long, c As Long
Set docMain = ActiveDocument
With docMain.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
c = .RecordCount
End With
For i = 1 To c
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Execute False
Set docSingle = ActiveDocument
docSingle.SaveAs2 FileName:="FilePathHere" & "\MergeResult_" & i & ".docx"
docSingle.Close False
Next i
End With
End Sub
準備好合併列印的主文件,並右存新檔為「*.docm」格式(巨集指令文件):
在 Word 的合併列印主文件中完成合併列印的內容,並在「開發人員」功能表中進入 Visual Basic。
在「插入」功能表中選取:模組。並貼上複製而來的程式碼。
將程式碼中的「FilePathHere」置換成你要輸出個別文件的資料夾(本例:V:\Google Downloads\doc)
其中產生的檔案會以「MergeResult_」加上流水號加以命名。
點選:執行,產生以下結果。
如果你想要將個別檔案以 PDF 檔格式命名,則可以使用:
指令:如何將Word的合併列印結果,產生每一筆資料以一個檔案儲存,並且儲存的是PDF格式。
得到以下的 VBA 程式,仿前面所述的作法,再操作一之,即可得到 PDF 檔。
Sub SaveMergeResultsAsPDF()
Dim docMain As Document, docSingle As Document
Dim i As Long, c As Long
Dim pdfPath As String
Set docMain = ActiveDocument
pdfPath = "YourFolderPathHere" ' 更改此路徑到你想儲存PDF文件的文件夾
With docMain.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
c = .RecordCount
End With
For i = 1 To c
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Execute False
Set docSingle = ActiveDocument
' 儲存為PDF
docSingle.ExportAsFixedFormat OutputFileName:= _
pdfPath & "\MergeResult_" & i & ".pdf", _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, _
OptimizeFor:=wdExportOptimizeForPrint, _
Range:=wdExportAllDocument, _
Item:=wdExportDocumentContent, _
IncludeDocProps:=True, _
KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, _
DocStructureTags:=True, _
BitmapMissingFonts:=True, _
UseISO19005_1:=False
docSingle.Close False
Next i
End With
End Sub