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

3
我在Excel中有一个宏。这个宏的一部分使用Workbooks.Open(Filepath)打开其他工作簿。
我打开的一些工作簿内含(做得很差)的VBA代码,试图计算UDF并且失败了。
不想使用On Error Resume NextOn Error GoTo,如何才能让程序执行“打开文件,但不要运行任何代码”?
由于可能存在安全问题,所以尝试避免让代码在第一次运行时就执行。我对打开这些文件感到足够自信,而且它们不太可能被攻击,但是漏洞是可能发生的,既然不需要也没必要留下漏洞。我也不希望错误消息打断我的代码执行。
在网上搜索只会显示按SHIFT+打开可以打开文件而不执行代码,但这根本不是我要做的。我正在寻找等效的VBA方法。

1
如果您在打开工作簿时按住左Shift键,则不会运行工作簿打开代码:https://www.jkp-ads.com/Articles/preventopenevent.asp - Jerry Jeremiah
@JerryJeremiah:如果我表达不清楚,很抱歉。我正在尝试以编程方式打开文件。 - Selkie
1
@ScottHoltzman:下面提供的代码很好地清除了我正在打开的文件中的UDF。 - Selkie
2个回答

5

AutomationSecurity很可能是您想要的:

https://learn.microsoft.com/en-us/office/vba/api/Excel.Application.AutomationSecurity

MsoAutomationSecurity可以是以下MsoAutomationSecurity常量之一。

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

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

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


任何人看到这篇文章,请也阅读Ahmed的回答。这两个答案是在同一分钟提交的,结合起来可以很好地解释发生了什么,并且如何解决它。 - Selkie

4

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

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

这是一个优秀且信息丰富的回答。上面链接的文档提到使用msoAutomationSecurityLow作为默认返回值。为什么您选择了ByUI作为默认返回值? - Selkie
1
@Selkie,根据Tim在他的回答中提供的文档页面的指南,你可以自行决定将其设置为“Low”或“ByUI”。msoAutomationSecurityByUI意味着如果在此之后尝试打开另一个XLSM文件而没有将其设置为ForceDisable(可能是错误操作),它将(基于设置)显示一个警告消息,询问是否启用或禁用宏(类似于手动打开文件时发生的情况)。 - 41686d6564 stands w. Palestine
1
另一方面,msoAutomationSecurityLow将允许宏_并可能运行代码_而不会有任何通知(除非您当然使用ForceDisable)。正如您建议的那样,msoAutomationSecurityLow是默认设置。我只是想向您展示其他选项。我本来打算在发布答案后包含文档链接,以便您了解每个选项的含义,但Tim赶上了我:D因此,没有必要再次发布。 - 41686d6564 stands w. Palestine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接