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)。 .ExportAsFixedFormatWordApp 对象上不存在。 是的,我尝试过并且工作过。在 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 文档。您的代码应该更像下面的代码。

请注意,我已经为 WordAppWordDoc 添加了变量声明,还添加了代码来释放这些对象。

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文档执行宏的主要内容,如果未能解决你的问题,请参考以下文章

如何用VBA宏程序将excel中的内容批量复制到word文档中去

如何用EXCEL的VBA控制WORD文档?

Excel VBA 宏后期绑定

关于 word VBA的宏运行 输入文本的代码 急求 谢谢

通过VBA将EXCEL的数据传给WORD

VBA Word 从 Excel 中查找和替换 /&-