Vba 在邮件合并中使用字段代码作为文件名

Vba 在邮件合并中使用字段代码作为文件名,vba,pdf,ms-word,Vba,Pdf,Ms Word,我想将我的邮件合并成单独的PDF文件(此部分正在工作)。但文件名保存为计数器,即数字 Sub AllSectionsToSubDoc() Dim x As Long Dim Sections As Long Dim Doc As Document Application.ScreenUpdating = False Application.DisplayAlerts = False

我想将我的邮件合并成单独的PDF文件(此部分正在工作)。但文件名保存为计数器,即数字

Sub AllSectionsToSubDoc()

    Dim x               As Long
    Dim Sections        As Long
    Dim Doc             As Document

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set Doc = ActiveDocument
    Sections = Doc.Sections.Count
    For x = Sections - 1 To 1 Step -1
        Doc.Sections(x).Range.Copy
        Documents.Add
        ActiveDocument.Range.Paste
        ActiveDocument.SaveAs (Doc.Path & "\" & x & ".pdf")
        ActiveDocument.Close False
    Next x

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True 
End Sub
我想扩展这段代码,以便它使用文件名保存文件,这些文件名不是数字,而是取自我指定的一个字段代码


例如,如果我在VBA代码中指定字段代码«First_Name»作为文件名,并且有3个名称-(John、Peter、Samuel)3个文件应保存在我的目标文件夹中,分别为John.pdf、Peter.pdf、Samuel.pdf

从数据源获取值,用逗号分隔,循环遍历返回的数组并分别保存每个文档

类似这样的东西(我还没能测试它)


如果值是单个名称(无逗号),则
Split()
函数将返回一个包含单个元素的数组

我设法找到了一个非常简单的解决方案。创建邮件合并后,我预览了结果并运行了以下宏

ChangeFileOpenDirectory "C:\User\Documents\folder\"
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        " C:\User\Documents\folder\" & ActiveDocument.MailMerge.DataSource.DataFields("Field") & ".pdf", _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForOnScreen, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
        ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
然后循环直到结束

ChangeFileOpenDirectory "C:\User\Documents\folder\"
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        " C:\User\Documents\folder\" & ActiveDocument.MailMerge.DataSource.DataFields("Field") & ".pdf", _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForOnScreen, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
        ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord