如何在进行邮件合并(VBA)时自动保存为PDF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在进行邮件合并(VBA)时自动保存为PDF相关的知识,希望对你有一定的参考价值。

当我尝试运行下面的代码时,会发生以下情况:

1)打开“将PDF文件另存为”窗口

2)我必须手动输入名称

3)代码运行

我想自动执行步骤1和2,以便代码在没有任何手动输入的情况下运行,并将其保存为whatever.pdf,无论路径如何。

我尝试使用ExportAsFixedFormat,但问题是它只将第一页保存为pdf,并且未保存通过邮件合并的剩余100多条记录。最重要的是,它仍然打开步骤1中的对话窗口。

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

任何有关这方面的帮助将不胜感激!

答案

[编辑]更正了对象参考。添加了SaveAs2

在OP中,尝试使用伪打印机保存为pdf。 SaveAs pdf格式与各种pdf伪打印机之间存在差异。是否有理由打印到PDF并保存该文件,而不是执行另存为并选择PDF格式?

With myMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF  

以下有时需要使用脚本化保存来提示静音。对于上述测试方法,没有提示,因此可能不需要。

在SaveAs之前切换.DisplayAlerts

Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF
Application.DisplayAlerts = wdAlertsAll

要么

Dim tempDisplayAlerts As Long
tempDisplayAlerts = Application.DisplayAlerts  
Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SaveAs2 "path & filename", wdFormatPDF    
Application.DisplayAlerts = tempDisplayAlerts

以上是关于如何在进行邮件合并(VBA)时自动保存为PDF的主要内容,如果未能解决你的问题,请参考以下文章

VBA 打印为 PDF 并使用自动文件名保存

OUTLOOK VBA 收到新邮件后自动保存包含特定字符的附件到指定文件夹

excelsheet的所有列都不适合pdf的同一页;使用 Excel VBA 进行转换时

在 C# 中执行邮件合并时 LibreOffice 崩溃

VBA研究输出PDF文件合并时出错

VBA研究输出PDF文件合并时出错