使用 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。
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 常量,例如wdExportFormatPDF
、wdExportOptimizeForPrint
、wdExportDocumentWithMarkup
、wdExportCreateNoBookmarks
、wdSaveChanges
、wdOriginalDocumentFormat
。 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
我想从 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。
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 常量,例如wdExportFormatPDF
、wdExportOptimizeForPrint
、wdExportDocumentWithMarkup
、wdExportCreateNoBookmarks
、wdSaveChanges
、wdOriginalDocumentFormat
。 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