【问题标题】:Should I use auto_open/close or workbook_open/beforeclose to run VBA on open?我应该使用 auto_open/close 还是 workbook_open/beforeclose 在打开时运行 VBA?
【发布时间】:2020-04-07 23:51:22
【问题描述】:

在 Excel 2003/2007 中,在哪些情况下应该使用 auto_open/auto_close 例程,在哪些情况下应该使用 workbook_open/workbook_beforeclose 事件?

除了向后兼容 Excel 的史前版本之外,我知道的区别是一个是公共的,一个是私有的。其他差异是什么(如果有)?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我花了很长时间在这些打开变体之间进行选择,我们使用了 Auto_Open。主要原因是如果有人运行以下代码:

    Application.EnableEvents = False
    

    ... 那么 Workbook_Open 事件将不会触发。我感觉有另一种情况,Workbook_Open 也不起作用,但我现在不记得了。

    我对关闭事件没有强烈的看法,但老实说,我也会在那里使用 Auto_Close。归根结底,它进行了更多测试。

    【讨论】:

    • 虽然Workbook.Open 是一个事件,但它也是一个保留的子例程,如Workbook_Open。如果您的 ThisWorkbook 对象中有 Sub Workbook_Open 子例程,则在打开该工作簿时,子例程 将 运行,即使该子例程所做的第一件事是 Application.EnableEvents = False....为了澄清。该 EnableEvents 行只会阻止Workbook.Open稍后在同一 VBAProject 对象中工作。
    • 确实如此 - 我所说的情况是您在同一个 Excel 会话中打开的另一个工作簿禁用了事件。在这种情况下,您的工作簿在打开时不会运行打开事件。我知道这听起来很奇怪而且不太可能,但我从事的是投资银行业务,当您处理大量包含大量 VBA 的工作表时,这实际上很常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2013-05-30
    • 2012-02-25
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多