【发布时间】:2020-04-07 23:51:22
【问题描述】:
在 Excel 2003/2007 中,在哪些情况下应该使用 auto_open/auto_close 例程,在哪些情况下应该使用 workbook_open/workbook_beforeclose 事件?
除了向后兼容 Excel 的史前版本之外,我知道的区别是一个是公共的,一个是私有的。其他差异是什么(如果有)?
【问题讨论】:
在 Excel 2003/2007 中,在哪些情况下应该使用 auto_open/auto_close 例程,在哪些情况下应该使用 workbook_open/workbook_beforeclose 事件?
除了向后兼容 Excel 的史前版本之外,我知道的区别是一个是公共的,一个是私有的。其他差异是什么(如果有)?
【问题讨论】:
我花了很长时间在这些打开变体之间进行选择,我们使用了 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 对象中工作。