Мне нужен макрос в Word, который сохраняет каждую страницу серийного письма отдельно в формате PDF - PullRequest
0 голосов
/ 17 апреля 2020

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

Заранее спасибо.

мой скрипт:

    Sub SerienbriefOneDoc()
'
' SerienbriefOneDoc Makro
'
'
Dim Dateiname As String
 Dim LetzterRec As Long

 Application.ScreenUpdating = False
 Application.Visible = False

 Const path As String = "G:\Laptop\Volume_D\Lehre\Basislehrjahr\Auftraege\Projektarbeit\WordMakro\Serienbrief\save\"      'Speicherpfad des Resultates
 ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
 LetzterRec = Word.ActiveDocument.MailMerge.DataSource.ActiveRecord
 ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

     With ActiveDocument.MailMerge
         .DataSource.ActiveRecord = wdFirstRecord
         Do
             If .DataSource.ActiveRecord > 0 Then
                If .DataSource.DataFields("Name").Value <> "0" Then
                     .Destination = wdSendToNewDocument
                     .SuppressBlankLines = True

                     With .DataSource
                         .FirstRecord = .ActiveRecord
                         .LastRecord = .ActiveRecord

                          DName = path & .DataFields("Name").Value & "_" & .DataFields("Vorname").Value & ".pdf"

                     End With
                        .Execute Pause:=False

                     Set dlgSaveAs = Dialogs(wdDialogFileSaveAs)
                        With dlgSaveAs
                        .Format = wdFormatPDF
                         ActiveDocument.SaveAs2 FileName:=DName
                         ActiveDocument.Close False
                        End With

                 End If

               End If

             If .DataSource.ActiveRecord < LetzterRec Then
                 .DataSource.ActiveRecord = wdNextRecord
             Else
                 Exit Do
             End If
         Loop
     End With
     Application.Visible = True
     Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 17 апреля 2020

В соответствии с документацией метода Document.SaveAs2 вам необходимо указать второй параметр FileFormat как wdFormatPDF, иначе он будет сохранен как документ word.

Обратите внимание, что

With dlgSaveAs
    .Format = wdFormatPDF

будет устанавливать формат файла только для диалогового окна, которое позволит вам выбрать путь и имя файла. Но SaveAs2 не заботится об этом, если вы тоже не укажете правильный формат.

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

Set dlgSaveAs = Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
    .Format = wdFormatPDF

End With

и оставить только эту часть там

ActiveDocument.SaveAs2 FileName:=DName, FileFormat:=wdFormatPDF
ActiveDocument.Close False

Что на самом деле произошло ...

... это то, что вы сохранили файл your-file.pdf с расширением .pdf, но внутри документа в формате Word. Если вы переименуете его в your-file.docx, он, вероятно, откроется в Word.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...