我有一个宏,该宏会自动使用以下命令打开双击Excel工作簿:Sub Auto_Open()
在模块中包含脚本,但是在VB编辑器中的同一脚本中ThisWorkbook
,没有模块使用:Private Sub Workbook_Open()
不起作用。
任何想法为何,直接从中自动打开有什么优势ThisWorkbook
?如果可以实现后者,那么我不需要任何模块。
[Public] Sub Auto_Open()
标准/过程模块中的旧方法/旧方法。除了其名称外,没有什么可以说“该过程在首次打开工作簿时自动运行”,如何将其连接起来以在Open上运行是一种魔力:同名的公共过程在open上运行,如果您拥有一个公共过程,谁知道呢?两个不同模块中的两个这样的过程。该名称也不是标准的:这里没有遵循公认的,相当熟悉的Interface_Member
约定(两个标识符之间带有下划线):Auto
Excel对象模型中没有对象。
Private Sub Workbook_Open()
是一个事件处理程序,用于处理实现接口的Open
事件;像一样,它在打开工作簿时运行,但是其机制更加透明,并且与其他所有事件处理过程完全一样:是接口,是事件/成员。Workbook
ThisWorkbook
Auto_Open
Workbook
Open
这是一个Workbook
事件,它具有有趣的含义:(通过VBA代码)以编程方式打开的工作簿将始终在启用宏的情况下打开-如果该工作簿具有Workbook_Open
处理程序,则该宏将运行-但是,这是一个实际事件,因此您的调用代码可以决定使用关闭它Application.EnableEvents = False
。
至于它没有运行,我可以想到的唯一原因是禁止宏安全性设置,如果名称中有错字。永远不要手动键入事件处理程序签名-通过使用代码窗格顶部的下拉菜单,您可以使VBE为您生成正确的事件处理程序签名。
您知道您正在查看事件处理程序过程,其中左侧下拉列表包含对象/接口的名称,而右侧下拉列表包含事件/成员的名称:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句