Как автоматически сохранить PDF при выполнении слияния (VBA) - PullRequest
0 голосов
/ 07 марта 2019

Когда я пытаюсь запустить приведенный ниже код, происходит следующее:

1) Открывается окно «Сохранить файл PDF как»

2) Я должен вручную ввести имя

3) Код работает

Я хочу автоматизировать шаги 1 и 2, чтобы код выполнялся без каких-либо ручных вводов от меня и сохранял его в любом формате .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

Любая помощь по этому вопросу будет принята с благодарностью!

1 Ответ

0 голосов
/ 07 марта 2019

[Изменить] Исправленная ссылка на объектДобавлено SaveAs2

В OP сделана попытка использовать псевдопринтер для сохранения в формате PDF.Существуют различия между форматом PDF SaveAs и разнообразием псевдо-принтеров pdf.Есть ли причина для печати в PDF и сохранения этого файла, а не для сохранения как и выбора формата PDF?

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

Иногда необходимо выполнить следующие действия, чтобы заставить замолчать подсказки с сохранением по сценарию.Для вышеописанного проверенного метода подсказок не было, поэтому он может и не понадобиться.

Отключить .DisplayAlerts перед SaveAs

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
...