19

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

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

4

4 回答 4

27

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

Application.EnableEvents = False   'disable Events
workbooks.Open "WORKBOOKPATH"      'open workbook in question
Application.EnableEvents = True    'enable Events
于 2013-04-30T14:05:04.297 回答
21

我不知道为什么其他答案中没有明确提到这一点,但我发现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
于 2017-10-29T05:18:28.260 回答
7

这是另一种没有vba的打开方式

Start Excel Application > Go to File > Recent >

在此处输入图像描述

按住 Shift 键并双击打开 -

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

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


使用VBAApplication.EnableEvents属性 (Excel)

于 2015-10-08T01:26:05.620 回答
2

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
于 2014-01-10T03:27:20.107 回答