简体   繁体   中英

Use Field Code as File Name in Mail Merge

I want to separate my mail merge into separate PDF files (this part is working). But the file names are being saved as a counter ie numbers.

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

I want to extend this code so that it saves the files with file names which are NOT numbers, but are taken from one of the field codes that I specify.

For example if I specify field code «First_Name» as the file name in my VBA code, and there are 3 names - (John, Peter, Samuel) 3 files should be saved in my destination folder as John.pdf, Peter.pdf, Samuel.pdf

Get the value from the data source, Split between commas, loop through the returned array and save each document individually.

Something like this (I haven't been able to test it).

Dim Value As String
Dim Names As Variant
Dim idx As Long

Value = Doc.DataSource.DataFields("First_Name").Value
Names = Split(Value, ",")

For idx = LBound(Names) To UBound(Names)
    ActiveDocument.SaveAs Doc.Path & "\" & Names(idx) & ".pdf"
Next

In the event where the value is a single name (no comma), the Split() function will return an array with a single element.

I managed to find a very simple solution to this. After creating the mail merge, I previewed the results and ran the following macro

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

and then just loop until the end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM