从 VBA 打开工作簿并禁用 Workbook_Open() 代码?

Posted

技术标签:

【中文标题】从 VBA 打开工作簿并禁用 Workbook_Open() 代码?【英文标题】:Open a workbook from VBA and disable Workbook_Open() code? 【发布时间】:2013-04-24 11:16:51 【问题描述】:

我正在使用 VBA 打开电子表格,其中一些工作簿包含在调用 Workbook_Open() 时开始执行的代码。

如何使用 VBA 打开工作簿但停止自动执行代码?我只是打开工作簿来查看工作表中的公式——我不想执行任何代码。

【问题讨论】:

您可以随时设置宏安全以阻止所有宏。这可能并不理想,但应该按照您的要求进行。 【参考方案1】:

您想在 VBA 中打开工作簿之前尝试禁用事件,然后为模块的其余部分重新启用它们吗?尝试使用这样的东西:

Application.EnableEvents = False   'disable Events
workbooks.Open "WORKBOOKPATH"      'open workbook in question
Application.EnableEvents = True    'enable Events

【讨论】:

如果这不起作用,解决此问题的另一种方法是在模块中声明一个全局布尔值,并在您希望或不希望 Workbook_Open() 代码时将其设置为 true 或 false运行。您必须添加一个 If() 语句来检查您的 Workbook_Open() 子中的布尔值。 或者考虑使用Application.AutomationSecurity 我认为宏仍然处于启用状态,并且可以在重新启用 EnableEvents 后触发。【参考方案2】:

我不知道为什么其他答案中没有明确提到这一点,但我发现 Application.AutomationSecurity 完全符合要求。基本上

Application.AutomationSecurity = msoAutomationSecurityByUI
'This is the default behavior where each time it would ask me whether I want to enable or disable macros

Application.AutomationSecurity = msoAutomationSecurityForceDisable
'This would disable all macros in newly opened files

Application.AutomationSecurity = msoAutomationSecurityLow
'This would enable all macros in newly opened files

即使在代码运行后,设置也不会恢复为默认行为,因此您需要再次更改它。因此对于这个问题

previousSecurity = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
' Your code
Application.AutomationSecurity = previousSecurity

【讨论】:

【参考方案3】:

这里是另一种不使用 vba 的打开方式

Start Excel Application > Go to File > Recent >

按住 Shift 键并双击打开 -

这样做会阻止 Workbook_Open 事件触发和 Auto_Open 宏运行。

或者按住shift键双击打开工作簿。


对于 VBAApplication.EnableEvents property (Excel)

合作

【讨论】:

他询问如何从 VBA 代码打开。更难的问题。【参考方案4】:

Application.EnableEvents 和特定于工作簿的 Application.EnableEvents 的组合效果很好。任何时候重新引用工作簿(例如复制单元格),它都会重新触发激活事件。工作簿必须先退出,关闭后无法访问,试试这个:

Dim wb as Workbook
Application.EnableEvents = False
Set wb = workbooks.Open "YOURWORKBOOKPATH"
Application.EnableEvents = True
wb.Application.EnableEvents = False

**Code**

wb.Application.EnableEvents = True
wb.Close

【讨论】:

没有“工作簿特定的 Application.EnableEvents”之类的东西。 wb.Application = 应用程序

以上是关于从 VBA 打开工作簿并禁用 Workbook_Open() 代码?的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 创建工作簿并填充工作表

提示用户打开工作簿并另存为新工作簿

excel vba卡在某个点

VBA密码保护Excel工作簿而不保存

excel表格数据量很大时如何提高vba的效率

在工作簿关闭的Excel VBA中禁用剪贴板提示