从 Excel 调用 Word 时出错:此项目中的宏已禁用

Error when calling Word from Excel: The macros in this project are disabled

提问人:Carlsberg789 提问时间:4/3/2020 最后编辑:CommunityCarlsberg789 更新时间:12/11/2020 访问量:4559

问:

我在 Excel 中有 VBA 代码,用于调用指定本地文件夹中的 Word 文件。

对于某些用户,它会变成以下错误:

此项目中的宏处于禁用状态。请参考主机应用程序的联机帮助或文档,以确定如何启用宏

当代码应该从 Excel 移动到 Word 文件时,会出现此错误。

到目前为止,我尝试过的内容:
Excel 信任中心:

  • 整个位置(包括受信任的子文件夹)。
  • 选中“允许信任网络上的文档”。
  • 禁用所有宏,通知为“选中”。
    我无法更改它,因为它是灰色的。但是,此设置对于所有用户都是相同的。
  • 受保护的视图被禁用。

Word 信任中心

  • 受保护的视图被禁用。
  • 打开 Word 文件不会生成任何“启用宏”通知。
Excel VBA MS-Word

评论

0赞 Griffin 12/1/2020
嗨,你找到解决方法了吗?我有同样的问题。
0赞 Andreas 12/2/2020
也许您可以将VBA代码设置为加载项,这样它与Excel实例的连接比工作簿/文档的连接更紧密。这是一个可能的解决方案吗?@Griffin
0赞 FaneDuru 12/2/2020
当您说“错误出现时,代码应该从 Excel 移动到 Word 文件”,我们是否应该理解文档(.docm 类型)或 Normal.dotm 中有一段代码?或者,excel 代码只操作 Word 会话中的文档?
0赞 Vignesh 12/3/2020
这可能是由于启用宏选项,请尝试将其集成到您的 excel 中,以便自动启用宏 xl-central.com/force-users-to-enable-macros-in-a-workbook.html
0赞 MBB70 12/4/2020
@user19702回答中提出的一些问题是有道理的。具体而言,您需要提供有关每个用户的 MS Office 和 Windows 环境的更多详细信息。有些运行 32 位,有些运行 64 位?有些运行 Office 2013,而另一些运行 2016、2019 或 365?有些在运行 C2R,有些在运行 MSI?这些是你在这样的情况下必须澄清的事情。

答:

0赞 Cpt.Whale 4/3/2020 #1

故意将其变灰的正常方法(也许您的用户的 IT 通过 gpo 设置了这一点?)是注册表项,其中 16.0 是您安装的版本

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Security]
"VBAWarnings"=dword:00000001

要解决的其他问题包括:

  • 他们可以创建和运行自己的宏吗?
  • 他们可以在不同的文档中运行不同的宏吗?
  • 有没有人有不同版本的 Excel?
  • excel 和 word 文件是否都是用户 PC 的本地文件?
  • 用户是否启用了开发人员设置?
  • 是否有人在“宏设置”>“开发人员宏设置”中有不同的设置?
  • Windows 是否阻止了 excel 文件?右键单击文件>属性>“常规”:

blocked

还有这个特定的 GPO,它只阻止来自松散定义的“Internet”的宏

0赞 Michael Wycisk 12/6/2020 #2

我前段时间遇到了类似的问题。从 Excel 宏中打开 Word 文档时,一切对我来说都很好。但是在另一台 PC 上,宏只是停止了,并显示一条消息指示宏已禁用。

可以通过将单词 app 的属性更改为 来解决此问题。Application.AutomationSecuritymsoAutomationSecurityLow

请务必在代码执行后将该属性设置回其原始值。

您可以尝试以下代码示例。

Option Explicit

Sub OpenWordsFilePathWithLowSecuritySettings()
    Dim sFilePath As String
    Dim wrdApp As Object
    Dim wrdDoc As Object
    Dim lAutomationSetting As Long
    
    'The path to your word file
    sFilePath = "C:\Users\micha\Desktop\example file.docx"

    Set wrdApp = CreateObject("Word.Application")
    
    wrdApp.Visible = True
    
    'Save word app automation security so we can restore it afterwards
    lAutomationSetting = wrdApp.AutomationSecurity
    'Error handling to make sure the automation security is reset even if an error occurs
    On Error GoTo ErrorHandler
    'Change the automation setting to low security
    wrdApp.AutomationSecurity = msoAutomationSecurityLow
    
    'Open word document
    Set wrdDoc = wrdApp.Documents.Open(sFilePath)
    
    'Your code - do something with the word file
    '
    '
    '
    
ErrorExit:
    On Error Resume Next
    'Close the word document
    wrdDoc.Close
    'Reset the word automation security
    wrdApp.AutomationSecurity = lAutomationSetting
    wrdApp.Quit
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
    
    Exit Sub
    
ErrorHandler:
    MsgBox "An error occured: (Code: " & Err.Number & ", Description: " & Err.Description & ")", vbCritical, "Error"
    Resume ErrorExit
End Sub