使用 vba 将 docx 导出为 pdf

Export docx to pdf with vba

我想从 excel vba 将 docx 文件导出为 pdf 文件。 文档 file.docx 已正确打开。 但是,调用方法 ExportAsFixedFormat 时发生错误:运行-time error '5': Invalid procedure call or argument。 我觉得争论还可以。

下一个小错误:ActiveDocument.Path不起作用。出现错误“运行-time error '424': Object required” 因此我使用 WordApp.Documents(myFileName).ExportAsFixedFormat 而不是 ActiveDocument.ExportAsFixedFormat.

此代码从文件 Macro.xlsm 执行。我使用 Microsoft Office 2021。

Method exportasfixedformat

Dim fileNameDoc As String
Dim fileNamePdf As String
Dim WordApp

Set WordApp = CreateObject("Word.Application")
FileNameDoc = "D:\rd\file.docx"

WordApp.Documents.Open FileNameDoc
WordApp.Visible = True
WordApp.Documents(FileNameDoc).Activate ' <- activation doesn't work

fileNamePdf = "D:\rd\file.pdf"
'fileNamePdf = ActiveDocument.Path & "\" & "file.pdf" 

' https://docs.microsoft.com/en-us/office/vba/api/word.document.exportasfixedformat
' here is error: Run-time error '5': Invalid procedure call or argument
WordApp.Documents(myFileName).ExportAsFixedFormat OutputFileName:=fileNamePdf, _
                                                             ExportFormat:=wdExportFormatPDF, _
                                                             OpenAfterExport:=False, _
                                                             OptimizeFor:=wdExportOptimizeForPrint, _
                                                             Range:=wdExportAllDocument, _
                                                             Item:=wdExportDocumentWithMarkup, _
                                                             IncludeDocProps:=False, _
                                                             CreateBookmarks:=wdExportCreateNoBookmarks, _
                                                             BitmapMissingFonts:=True

' https://docs.microsoft.com/en-us/office/vba/api/word.document.close(method)'
WordApp.Documents(myFileName).Close _
'ActiveDocument.Close _ 
    SaveChanges:=wdSaveChanges, _ 
    OriginalFormat:=wdOriginalDocumentFormat

有解决方案吗?

您使用的代码是针对 Word 的,并且使用了很多 Word 常量,例如wdExportFormatPDFwdExportOptimizeForPrintwdExportDocumentWithMarkupwdExportCreateNoBookmarkswdSaveChangeswdOriginalDocumentFormat。 Excel不明白这些是什么

你有两个选择。最好的选择是设置对 Word 库的引用。在 Visual Basic 编辑器中 select 从“工具”菜单中引用。在出现的对话框中向下翻页(大约 16 次)直到您看到 Microsoft Word 对象库的条目并选中它旁边的框。

您的另一个选择是在您的代码中为您要使用的每个 Word 常量创建常量。您需要使用 Word 中的对象浏览器或联机帮助来查找值。

同样,Excel不理解ActiveDocument。您需要在要使用的任何 Word 对象前加上前缀 WordApp。不过,如果用一个变量指向你打开的文档就更好了:

Set WordDoc = WordApp.Documents.Open(FileNameDoc)

然后您可以使用 WordDoc 变量代替 ActiveDocument

Dim fileNameDoc As String
Dim fileNamePdf As String
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

Set WordApp = CreateObject("Word.Application")
fileNameDoc = "D:\rd\file.docx"

Set WordDoc = WordApp.Documents.Open(fileNameDoc)
WordApp.Visible = True

fileNamePdf = WordDoc.Path & "\" & "file.pdf"

' https://docs.microsoft.com/en-us/office/vba/api/word.document.exportasfixedformat
WordDoc.ExportAsFixedFormat OutputFileName:=fileNamePdf, _
    ExportFormat:=wdExportFormatPDF, _
    OpenAfterExport:=False, _
    OptimizeFor:=wdExportOptimizeForPrint, _
    Range:=wdExportAllDocument, _
    Item:=wdExportDocumentWithMarkup, _
    IncludeDocProps:=False, _
    CreateBookmarks:=wdExportCreateNoBookmarks, _
    BitmapMissingFonts:=True

' https://docs.microsoft.com/en-us/office/vba/api/word.document.close(method)'
WordDoc.Close _
 SaveChanges:=wdSaveChanges, _
 OriginalFormat:=wdOriginalDocumentFormat