Я видел много людей, задающих этот вопрос, но я не могу заставить его работать.
Справочная информация - я создаю слияние писем из 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.
Может ли кто-нибудь помочь здесь?
Заранее благодарен за совет
Ли