如何在执行邮件合并(VBA)时自动另存为PDF
当我尝试运行下面的代码时,会发生以下情况: 1) 它会打开一个“将PDF文件另存为”窗口 2) 我必须手动输入名称 3) 代码运行 我想自动执行步骤1和步骤2,这样代码运行时不需要任何手动输入,并将其保存为任意路径中的whatever.pdf 我尝试使用ExportAsFixedFormat,但问题是它只将第一页保存为pdf,其余100多条正在进行邮件合并的记录没有保存。最重要的是,它仍然会从步骤1打开该对话框窗口如何在执行邮件合并(VBA)时自动另存为PDF,vba,ms-word,mailmerge,Vba,Ms Word,Mailmerge,当我尝试运行下面的代码时,会发生以下情况: 1) 它会打开一个“将PDF文件另存为”窗口 2) 我必须手动输入名称 3) 代码运行 我想自动执行步骤1和步骤2,这样代码运行时不需要任何手动输入,并将其保存为任意路径中的whatever.pdf 我尝试使用ExportAsFixedFormat,但问题是它只将第一页保存为pdf,其余100多条正在进行邮件合并的记录没有保存。最重要的是,它仍然会从步骤1打开该对话框窗口 ActiveDocument.ExportAsFixedFormat Outpu
ActiveDocument.ExportAsFixedFormat OutputFilename:=whatever.pdf, _
ExportFormat:=wdExportFormatPDF, etc.
守则:
Sub DoMailMerge()
Set myMerge = ActiveDocument.MailMerge
If myMerge.State = wdMainAndSourceAndHeader Or _
myMerge.State = wdMainAndDataSource Then
With myMerge.DataSource
.FirstRecord = 1
.LastRecord = 3
End With
End If
With myMerge
.Destination = wdSendToPrinter
.Execute
End With
End Sub
在此方面的任何帮助都将不胜感激 [Edit]已更正对象引用。添加了SaveAs2 在OP中,尝试使用伪打印机保存为pdf。SaveAs pdf格式和各种pdf伪打印机之间存在差异。是否有理由打印为PDF并保存该文件,而不是执行另存为并选择PDF格式
With myMerge
.Destination = wdSendToNewDocument
.Execute
End With
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF
有时需要执行以下操作以使脚本保存的提示静音。对于上述测试方法,没有提示,因此可能不需要
在另存为之前关闭。显示警报
Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF
Application.DisplayAlerts = wdAlertsAll
或
首先,ActiveDocument.DisplayAlerts会抛出一个错误,因为我认为它应该是Application.DisplayAlerts;其次,即使它工作正常,它仍然无法解决保存合并文件(包含所有100多条记录)的问题as pdf.Application.DisplayAlerts=False还将终止在该设置处于活动状态时打开的文档中的任何邮件合并。“代码:”下的代码不能是完整代码吗?它不执行保存操作-它只将合并结果(三条记录)发送到打印机。您需要以块的形式显示导致您描述的行为的完整代码。但是FWIW您需要研究如何将合并保存到单独的文档中——这不是邮件合并所知道的。在互联网上可以找到各种详细描述的方法。这种方法在许多不同的网站上已经被多次提到。请参阅,例如,将Mailmerge输出发送到各个文件,并从Excel运行Mailmerge,将输出发送到Mailmerge提示和技巧线程中的各个文件:和:谢谢链接,但是,我不需要将其保存到各个pdf文件。我需要一个最终的PDF最终与它的所有记录。例如,我的名单上有500个名字和地址,比如说300个住在亚洲,100个住在欧洲,100个住在北美。我需要的代码邮件合并这些字段,并只保存3个pdf文件(Asia.pdf有300条记录,Europe.pdf有100条记录,NA.pdf有100条记录)。
Dim tempDisplayAlerts As Long
tempDisplayAlerts = Application.DisplayAlerts
Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF
Application.DisplayAlerts = tempDisplayAlerts