2015-10-30 5 views
1

Я работаю с макросом vba, который отлично работает, но мне нужно сохранить документы как .pdf.Excel macro mailmerge - экспорт в pdf

Я ищу советы, но я не знаю, как их найти. В прошлый раз я нашел это решение: vba mail merge save as pdf , но я не знаю, примените его к моему макросу.

Вот мой код:

Sub RunMerge() 

Dim wd As Object 
Dim wdocSource As Object 

Dim strWorkbookName As String 

On Error Resume Next 
Set wd = GetObject(, "Word.Application") 
If wd Is Nothing Then 
    Set wd = CreateObject("Word.Application") 
End If 
On Error GoTo 0 

Set wdocSource = wd.Documents.Open(ThisWorkbook.Path & "\" & "ArtSpecDatabase.docx") 

strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 

wdocSource.MailMerge.MainDocumentType = wdFormLetters 

wdocSource.MailMerge.OpenDataSource _ 
     Name:=strWorkbookName, _ 
     AddToRecentFiles:=False, _ 
     Revert:=False, _ 
     Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _ 
     SQLStatement:="SELECT * FROM `Sheet2$`" 

With wdocSource.MailMerge 
    .Destination = wdSendToNewDocument 
    .SuppressBlankLines = True 
    With .DataSource 
     .FirstRecord = 1 
     .LastRecord = 1 
    End With 
    .Execute Pause:=False 
End With 

Dim PathToSave As String 
PathToSave = ThisWorkbook.Path & "\" & "pdf" & "\" & Sheets("Sheet2").Range("B2").Value2 & ".docx" 
If Dir(PathToSave, 0) <> vbNullString Then 
    wd.FileDialog(FileDialogType:=msoFileDialogSaveAs).Show 
Else 
    wd.activedocument.SaveAs2 PathToSave, wdFormatDocumentDefault 

End If 

wd.Visible = True 
wdocSource.Close savechanges:=False 
wd.activedocument.Close savechanges:=False 

Set wdocSource = Nothing 
Set wd = Nothing 


End Sub 

ответ

2

Чтобы экспортировать документ Word, в формате PDF, вам нужно использовать метод ExportAsFixedFormat. Например, вы можете заменить SaveAs2 вызов с этим:

wd.ActiveDocument.ExportAsFixedFormat PathToSave, 17 'The constant for wdExportFormatPDF 

Теперь, ваш призыв к FileDialog не имеет смысла, поэтому я предлагаю изменить весь Dir (...) Если-предложение к этому:

Dim PathToSave As String 
PathToSave = ThisWorkbook.Path & "\" & "pdf" & "\" & Sheets("Sheet2").Range("B2").Value2 & ".pdf" 
If Dir(PathToSave, 0) <> vbNullString Then 
    With wd.FileDialog(FileDialogType:=msoFileDialogSaveAs) 
     If .Show = True Then 
      PathToSave = .SelectedItems(1) 
     End If 
    End With 
End If 

wd.ActiveDocument.ExportAsFixedFormat PathToSave, 17 'The constant for wdExportFormatPDF 

EDIT: Забыл включить расширение «.pdf».

+0

Привет, спасибо за обновление. Я поместил ваш код в свой макрос, но он не запускается. Я получаю ошибку во время выполнения '5: Неверный вызов или аргумент процедуры. После отладки этой ошибки он показывает мне ошибку в строке кода: 'wd.ActiveDocument.ExportAsFixedFormat PathToSave, wdExportFormatPDF' Помогите мне, что случилось? – Jean

+0

Попробуйте заменить 'wdExportFormatPDF' на 17. – DanL

+0

Awesome !!! Спасибо. Теперь он работает;) – Jean

0

Используйте приведенный ниже код, чтобы экспорт в Excel в формате PDF

Sub tst1() 

Dim fFilename  As String 

    fFilename = "C:\Documents and Settings\test.xlsx" 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    fFilename & ".pdf" _ 
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=False 


End Sub 
Смежные вопросы