You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel VBA打开Word文档时禁止运行Document_Open自动宏

解决方案

核心原因是Word的Document_Open属于文档自带的自动运行宏,通过Excel VBA自动化调用打开Word时,默认会执行该事件,弹出的模态用户窗体会阻塞代码继续向下执行,可通过以下两种方案修复:

方案1:临时禁用自动化实例的宏自动运行(推荐)

该方案仅禁止自动化打开文件时自动运行宏,不会影响用户手动打开Word文件时的宏规则,修改后的代码如下:

Private Sub CommandButton18_Click()
    Dim Word As New Word.Application
    Dim MRpt As Word.Document
    Dim oriSecurity As MsoAutomationSecurity
    
    Word.Visible = True
    ' 保存Word实例原有的自动化安全设置
    oriSecurity = Word.AutomationSecurity
    ' 临时强制禁用自动化打开文档时自动运行所有宏
    Word.AutomationSecurity = msoAutomationSecurityForceDisable
    
    ' 必须指定Word实例下的Documents集合,避免调用到其他独立Word进程的资源
    Set MRpt = Word.Documents.Open(Filename:="MyWordDocumentPath" & ".docm")
    
    ' 打开完成后立即恢复原有安全设置,避免影响后续操作
    Word.AutomationSecurity = oriSecurity

    ' 此处填写你读取Word数据的业务代码


    ' 操作完成后清理资源,避免残留后台Word进程
    MRpt.Close SaveChanges:=wdDoNotSaveChanges
    Word.Quit
    Set MRpt = Nothing
    Set Word = Nothing
End Sub

方案2:仅禁用Word实例的事件响应

如果你后续还需要运行该文档内的其他宏,仅需要屏蔽Document_Open这类事件触发,可以使用以下代码:

' 打开文档前禁用事件响应
Word.EnableEvents = False
Set MRpt = Word.Documents.Open(Filename:="MyWordDocumentPath" & ".docm")
' 文档打开完成后恢复事件响应
Word.EnableEvents = True

如果你使用后期绑定创建Word实例(即Dim Word As Object,无需提前引用Word对象库),可将代码中的枚举替换为对应数值:msoAutomationSecurityForceDisable = 3、wdDoNotSaveChanges = 0。
如果不需要显示Word界面,可将Word.Visible = True改为False,后台运行更流畅,也不会干扰用户操作。

内容的提问来源于stack exchange,提问作者Milad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:06:04