word VBA邮件合并并单独保存?

Sub myMailMerge() '主文档的类型为信函 '合并全部数据记录 '假设主文档已链接好数据源,可以进行正常的邮件合并 Dim myMerg…
关注者
7
被浏览
6,004

3 个回答

之前有给大家分享一篇文章,如下:


里面分享的一个功能是批量将入职通知书发送给不同的候选人,在这个其中,我们需要通过邮件合并的方式将word单独保存后然后再转为pdf,对于这个功能,有很多小伙伴私信我需要这段代码,或者说其中有些小问题,又或者说需要更新代码里面的保存地址对于看不懂的同学来说太不友好。

正好借着一个网友的私信和推荐,将原有的代码进行一下更新迭代,希望对于需要的你有所帮助吧。特此感谢网友南悉发来的私信。

准备的内容非常简单:

准备好一个word文件和Excel文件如下:

Excel文件:

Excel本身的文件名你可以随便取,文件的内容如上图所示,需要注意的是这些列的内容因为涉及到代码,所以必不可少。

  • DocFolderPath: 存放单个的doc文件地址
  • DocFileName: 保存后单个的doc文件名称
  • PdfFolderPath: 存放单个的pdf文件地址
  • PdfFileName: 保存后单个的pdf文件名称

Word:

内容超级简单,关于利用excel和word之间怎么进行邮件合并,这个就不赘述了。通过下图可以看出,这个《Name》就是Excel中的第一列。

我们将下面的代码放到word里面,代码如下:

Sub MailMergeToPdfBasic()
    Dim masterDoc As Document, singleDoc As Document, lastRecordNum As Long
    Set masterDoc = ActiveDocument
    masterDoc.MailMerge.DataSource.ActiveRecord = wdLastRecord
    lastRecordNum = masterDoc.MailMerge.DataSource.ActiveRecord
    masterDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord
    Do While lastRecordNum > 0
        masterDoc.MailMerge.Destination = wdSendToNewDocument
        masterDoc.MailMerge.DataSource.FirstRecord = masterDoc.MailMerge.DataSource.ActiveRecord
        masterDoc.MailMerge.DataSource.LastRecord = masterDoc.MailMerge.DataSource.ActiveRecord
        masterDoc.MailMerge.Execute False
        Set singleDoc = ActiveDocument
        singleDoc.SaveAs2 _
            FileName:=masterDoc.MailMerge.DataSource.DataFields("DocFolderPath").Value & Application.PathSeparator & _
                masterDoc.MailMerge.DataSource.DataFields("DocFileName").Value & ".docx", _
            FileFormat:=wdFormatXMLDocument
        singleDoc.ExportAsFixedFormat _
            OutputFileName:=masterDoc.MailMerge.DataSource.DataFields("PdfFolderPath").Value & Application.PathSeparator & _
                masterDoc.MailMerge.DataSource.DataFields("PdfFileName").Value & ".pdf", _
            ExportFormat:=wdExportFormatPDF
        singleDoc.Close False
        If masterDoc.MailMerge.DataSource.ActiveRecord >= lastRecordNum Then
            lastRecordNum = 0
            masterDoc.MailMerge.DataSource.ActiveRecord = wdNextRecord
        End If
End Sub

打开word的VB代码框,新建一个模块,直接复制粘贴上述代码即可,如下:

然后将其保存后缀名为docm的文件即可。

完成上述的所有内容之后,点击开发工具中左上角的Macros按钮,弹出如下对话框:

选择这个MailMergeToPdfBasic,点击右边的Run按钮,屏幕闪烁几下之后,看看文件夹中的结果:

对于Mac用户,下面这段代码未经测试,先提供给大家,万一用上了,也可以反馈一下。

Sub MailMergeToPdf()
    Dim masterDoc As Document, recordNum As Long, singleDoc As Document
    Set masterDoc = ActiveDocument
    masterDoc.MailMerge.DataSource.ActiveRecord = wdLastRecord
    For recordNum = 1 To masterDoc.MailMerge.DataSource.ActiveRecord
        masterDoc.MailMerge.DataSource.ActiveRecord = recordNum
        masterDoc.MailMerge.Destination = wdSendToNewDocument
        masterDoc.MailMerge.DataSource.FirstRecord = recordNum
        masterDoc.MailMerge.DataSource.LastRecord = recordNum
        masterDoc.MailMerge.Execute False
        Set singleDoc = ActiveDocument
        singleDoc.SaveAs _
            FileName:=masterDoc.MailMerge.DataSource.DataFields("DocFolderPath").Value & "/" & _
                masterDoc.MailMerge.DataSource.DataFields("DocFileName").Value & ".docx", _
            fileFormat:=wdFormatXMLDocument
        singleDoc.SaveAs _