使.xlsm文件在使用VBA打开时不执行代码

使.xlsm文件在使用VBA打开时不执行代码,vba,excel,Vba,Excel,在Excel中有一个宏。该宏的一部分使用workbooks.Open(Filepath) 我正在打开的一些工作簿中有(做得很糟糕的)VBA代码,这些代码试图计算UDF,结果失败得很惨 如果不使用“出错后继续下一步”或“出错后转到”,我该如何说“打开此文件,不要运行任何代码” 由于可能存在的安全问题,尝试避免让代码首先执行。打开这些文件我感觉很舒服,而且它们很有可能不会被泄露,但可能会发生漏洞,为什么我不需要漏洞呢?我也不希望错误消息中断代码的执行 谷歌搜索显示shift+open在不执行代码的情

在Excel中有一个宏。该宏的一部分使用
workbooks.Open(Filepath)

我正在打开的一些工作簿中有(做得很糟糕的)VBA代码,这些代码试图计算UDF,结果失败得很惨

如果不使用“出错后继续下一步”或“出错后转到”,我该如何说“打开此文件,不要运行任何代码”

由于可能存在的安全问题,尝试避免让代码首先执行。打开这些文件我感觉很舒服,而且它们很有可能不会被泄露,但可能会发生漏洞,为什么我不需要漏洞呢?我也不希望错误消息中断代码的执行

谷歌搜索显示shift+open在不执行代码的情况下打开文件,这根本不是我想要做的。我正在寻找等效的VBA方法


谢谢

自动安全性
很可能就是您想要的:

MsoAutomationSecurity可以是这些MsoAutomationSecurity之一 常数

msoAutomationSecurityByUI。使用中指定的安全设置 “安全性”对话框

msoAutomationSecurityForceDisable。禁用所有 以编程方式打开所有文件中的宏,但不显示任何 安全警报。注意:此设置不会禁用Microsoft Excel 4.0宏。如果以编程方式打开包含Microsoft Excel 4.0宏的文件,将提示用户决定是否 或者不打开文件

msoAutomationSecurityLow。启用所有 宏。这是启动应用程序时的默认值


您可以为新打开的文件禁用宏,打开工作簿,然后重新启用宏:

Private Sub OpenWorkBookMacroDisabled(wbPath As String)
    Application.AutomationSecurity = msoAutomationSecurityForceDisable
    Workbooks.Open (wbPath)
    Application.AutomationSecurity = msoAutomationSecurityByUI
End Sub

如果您在打开工作簿时按住左shift键,它将不会运行工作簿打开代码:@JerryJeremiah:对不起,如果我不清楚,我正在尝试以编程方式打开文件。@ScottHoltzman:下面提供的代码正在干净利落地杀死我打开的文件中的UDF任何一个在这方面遇到障碍的人,请阅读Ahmed的回答。这两个答案几乎是在同一分钟内提交的,结合在一起可以很好地描述正在发生的事情,以及如何解决这一问题。这是一个很好且信息丰富的答案。上面链接的文档提到使用msoAutomationSecurityLow作为返回的默认值。为什么选择ByUI作为默认值返回?@Selkie根据Tim在其回答中提供的文档页面中的指导原则,将其设置为
Low
还是
ByUI
,取决于您
msoAutomationSecurityByUI
意味着,如果您在此之后试图打开另一个XLSM文件,但没有将其设置为
ForceDisable
(可能是错误),它将(可能是基于设置)显示警告消息,询问是否启用或禁用宏(类似于手动打开文件时发生的情况)另一方面,
msoAutomationSecurityLow
将启用宏,并可能在没有任何通知的情况下运行代码(当然,除非您使用
ForceDisable
)<但是,正如您所建议的,code>msoAutomationSecurityLow是默认值。我只是想告诉你另一个选择。在发布答案后,我打算添加一个指向文档的链接,这样你就知道每个选项的含义了,但蒂姆抢先告诉了我:D因此,没有必要再次发布。