Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在执行邮件合并(VBA)时自动另存为PDF_Vba_Ms Word_Mailmerge - Fatal编程技术网

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

如何在执行邮件合并(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

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

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

在此方面的任何帮助都将不胜感激

[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