VBA сохранить текстовый документ в формате PDF из Excel - PullRequest
0 голосов
/ 21 февраля 2019

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

Справочная информация - я создаю слияние писем из Excel в шаблон WORD, который затем мне нужно сохранить какPDF.Мой код VBA в Excel - и в идеале должен остаться там.Слияние почты работает, создание и сохранение документов Word, как и ожидалось, но я не могу сохранить как PDF.

Мой код для создания слияния почты:

'Declare Some Variable
Dim FTR As String
Dim cDir As String
Dim r As Long
Dim ThisFileName As String
Dim bCreatedWordInstance As Boolean


'Set Up WORD object
Dim objWord As Object
Dim objDoc As Object

On Error Resume Next

    bCreatedWordInstance = False
    Set objWord = GetObject(, "Word.Application")

    If objWord Is Nothing Then
        Err.Clear
        Set objWord = CreateObject("Word.Application")
        bCreatedWordInstance = True
    End If
    If objWord Is Nothing Then
        MsgBox "Could not start Word"
        Err.Clear
        On Error GoTo 0
        Exit Sub
    End If
    objWord.Visible = True

    'Open Word Template
    Set objDoc = objWord.Documents.Open("C:\MailMergeTest\MAILMERGE TEMPLATE.dotx")

    objWord.Activate


' Let Word trap the errors
On Error GoTo 0

' Set to True if you want to see the Word Doc flash past during construction
objWord.Visible = False


' Setup filenames
Const WTempName = "MAILMERGE TEMPLATE.dotx" '
Dim NewFileName As String


' Setup directories
cDir = ActiveWorkbook.Path + "\" 'Change if appropriate
ThisFileName = ThisWorkbook.Name




lastrow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
'Merge the data
With objDoc
With .MailMerge
.OpenDataSource Name:=cDir + ThisFileName, sqlstatement:="SELECT *  FROM `Sheet1$`"   ' Set this as required


For r = 1 To lastrow
    If Cells(r, 12).Value = "FTR Generated Already" Then GoTo nextrow
    FTR = Sheets("Sheet1").Cells(r, 3).Value

        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = r - 1
                .LastRecord = r - 1
                .ActiveRecord = r - 1
            End With
        .Execute Pause:=False

    ' Save new file
    NewFileName = "MAILMERGE TEST - " & FTR & ".docx"
    NewFileNamePDF = "MAILMERGE TEST - " & FTR & ".pdf"
    objWord.ActiveDocument.SaveAs cDir + NewFileName

    ' ***** SAVE AS PDF CODE HERE



 GoTo nextrow


0:
    Set objWord = Nothing
    Cells(r, 12).Value = "FTR Generated Already"

nextrow:

        Next r
    End With
    End With
    ' Close the New Mail Merged Document
            If bCreatedWordInstance Then
                objWord.Quit
            End If

    ' Close the Mail Merge Main Document
    objDoc.Close savechanges:=wdDoNotSaveChanges
    Set objDoc = Nothing

Я пробовал следующее:

objDoc.ExportAsFixedFormat OutputFileName:=cDir & NewFileNamePDF, ExportFormat:=wdExportFormatPDF

... появляется сообщение об ошибке «Недопустимый вызов процедуры или аргумент».

Также попытался:

objWord.ActiveDocument.SaveAs2 cDir + NewFileNamePDF, FileFormat:=wdFormatPDF

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

Может ли кто-нибудь помочь здесь?

Заранее благодарен за совет

Ли

...