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

21

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

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


您可以随时将宏安全性设置为阻止所有宏。这可能不是理想的选择,但应该能够满足您的要求。 - Gaffi
6个回答

31

你是否想在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()子程序中。 - dan
2
或者考虑使用 Application.AutomationSecurity - Tim Williams
我认为宏仍然处于启用状态,并且在重新启用EnableEvents后可能会被触发。 - Tuntable

24

我不知道为什么其他答案中没有清楚地提到这一点,但我发现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

8

以下是另一种不需要使用VBA打开Excel的方法:

打开Excel应用程序 > 点击“文件” > “最近文档” >

enter image description here

按住Shift键并双击即可打开 -

这样做可以防止Workbook_Open事件的触发和Auto_Open宏的运行。

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


使用VBA处理时,可以使用Application.EnableEvents属性 (Excel)


4
他询问如何从VBA代码中打开。这是一个更难的问题。 - Tuntable

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

2
没有“工作簿特定的Application.EnableEvents”这样的东西。 wb.Application = Application - MGM

0

打开一个空的Excel宏文件,然后放置一个带有Application.EnableEvents = False的宏,再打开文件。之后执行Application.EnableEvents = True。


0
Dim xlapp as New Excel.Application
Dim wb as Workbook

xlapp.EnableEvents = False
Set wb = xlapp.Workbooks.Open("My workbook name")
'Process the workbook
wb.Close savechanges := false
xlapp.Quit
set wb = nothing

请记住,Stack Overflow 不仅旨在解决当前的问题,还旨在帮助将来的读者找到类似问题的解决方案,这需要对底层代码有所理解。对于我们社区的初学者而言,这尤为重要,因为他们可能不熟悉语法。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么相信它是最佳方法的解释 - Jeremy Caney
记住,Stack Overflow的目的不仅仅是为了解决即时问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,“你能[编辑]你的回答来包含你正在做什么的解释”以及为什么你认为这是最佳方法吗? - Jeremy Caney

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