VBA在Excel中为Word文档执行宏
Posted
技术标签:
【中文标题】VBA在Excel中为Word文档执行宏【英文标题】:VBA Execute Macros for Word Document in Excel 【发布时间】:2019-02-16 20:53:25 【问题描述】:我有一个包含 Word 文档信息的 excel 计算。我想要的是打开word文档并将其自动保存为pdf - 在Excel中使用宏。
我已经尝试了以下方法:
Set WordApp = CreateObject("Word.Application")
With WordApp.Application
.Visible = True
.Documents.Open (LocationTemplate)
.ExportAsFixedFormat OutputFileName:= _
OfferPath, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ChangeFileOpenDirectory _
DestinationPath
.Quit
End With
什么是错误?期待您的支持。
【问题讨论】:
请告诉我们更多关于您的问题的信息:您是否收到错误消息?它是否以意想不到的方式工作? (我们无法检查您的代码,只要您不向我们提供 MCVE - 因为您的 sn-p 由于缺少声明而无法为我编译。) Word 文档打开后出现运行时错误 438。黄色标记从 .ExportAsFixedFormat 开始。 您能否将该信息编辑到您的问题中 - 我认为这对于解决您的问题至关重要。另外,看看我的回答,看看它是否对你有帮助。 不幸的是,在您的回答的帮助下,我没有找到最终的解决方案。尽管如此,我仍在尝试修复。第二种方法是 Word 包含一个AutoOpen
宏,从而可以将文件另存为 PDF。因此我需要excel计算的路径。是否有可能将路径(可能作为变量)从 excel 传输到 word?
使用AutoOpen
也不会成功。您首先需要解决代码中的问题。您的 .ExportAsFixedFormat
方法引用了错误的对象。正如my answer 和Cindy Meister's 回答中提到的那样。
【参考方案1】:
您似乎没有选择打开的文档
试试这样的
Set WordApp = CreateObject("Word.Application")
With WordApp.Application
.Visible = True
.Documents.Open (LocationTemplate)
.Activate
ActiveDocument.ExportAsFixedFormat
.ExportAsFixedFormat OutputFileName:= _
OfferPath, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ChangeFileOpenDirectory _
DestinationPath
.Quit
End With
祝你好运
【讨论】:
您是否尝试编译/运行您的代码?您的建议将表现出与 OP 的代码 sn-p 相同的行为(即错误 438)。.ExportAsFixedFormat
在 WordApp
对象上不存在。
是的,我尝试过并且工作过。在 wordapp 中确实存在,但在 activedocument 中是的......这就是你激活文档的原因。
我指的是ActiveDocument.ExportAsFixedFormat
行(应该可以工作),然后是.ExportAsFixedFormat OutputFileName:= _
[...],我很确定这行不通。 (因为它在Word.Application
上调用ExportAsFixedFormat
)
感谢您的回复。我将Wordapp
更改为Word.Application
而不是对象。然而,我得到一个编译错误,因为.ExportAsFixedFormat
不存在。有没有可能添加它?一般来说,我的问题不仅与.ExportAsFixedFormat
有关。我想使用 Excel 中的宏访问 word 文档。
@LuisCurado 现在我得到了你想要实现的目标。方法ExportAsFixedFormat
可用于Word.Document
类型的每个对象。为此,您不需要ActiveDocument
。 (因此无需先致电.Activate
)。如果您设置了对您正在打开的文档的引用,例如Set doc = .Documents.Open(LocationTemplate)
,则可以使用doc.ExportAsFixedFormat
。【参考方案2】:
运行时错误 438:“对象不支持此属性或方法”
您的问题源于这样一个事实,即在 With
块中您指的是 WordApp.Application
(它本身是多余的,可以简化为 WordApp
,因为它已经代表了一个 Word.Application
对象),因此与.ExportAsFixedFormat [...]
你实际上在做的那一行:
Word.Application.ExportAsFixedFormat
Application
对象上不存在此方法。 (现在再次阅读错误描述 - 注意到什么了吗?)
如果您不是通过 CreateObject()
对 Word.Application
对象进行后期绑定,而是设置对 Word 对象模型的引用(菜单:Extras - References),您可以执行以下操作:
Dim wordApp As Word.Application
Set wordApp = New Word.Application
With wordApp.Documents.Open LocationTemplate
.ExportAsFixedFormat [...]
End With
当您尝试调用错误的方法时,它为您提供(非常需要的)智能感知,以及编译时错误而不是运行时错误。
【讨论】:
【参考方案3】:错误是您在 Word.Application 对象上执行.ExportAsFixedFormat
。此方法适用于 Word 文档。您的代码应该更像下面的代码。
请注意,我已经为 WordApp
和 WordDoc
添加了变量声明,还添加了代码来释放这些对象。
Dim WordApp as Object
Dim WordDoc as Object
Set WordApp = CreateObject("Word.Application")
With WordApp.Application
.Visible = True
Set WordDoc = .Documents.Open (LocationTemplate)
WordDoc.ExportAsFixedFormat OutputFileName:= _
OfferPath, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
.Quit 0 'To not save changes to the document, just close it
Set WordDoc = Nothing
End With
Set WordApp = Nothing
【讨论】:
以上是关于VBA在Excel中为Word文档执行宏的主要内容,如果未能解决你的问题,请参考以下文章