首页 > 解决方案 > Auto Open Sub VBA

问题描述

I have a macro that automatically opens double-clicking Excel workbook using: Sub Auto_Open() with script in a module, but same script in VB editor ThisWorkbook with no modules using: Private Sub Workbook_Open() doesn't work.

Any ideas why, and is there any advantage to directly auto-opening from ThisWorkbook? I don't have a need for any modules if the latter could be accomplished.

标签: vbaexcel

解决方案


[Public] Sub Auto_Open()在标准/程序模块中是旧的/传统的方式。除了它的名字之外没有什么说“这个程序在第一次打开工作簿时自动运行”,它是如何连接到打开运行的有点神奇:一个名为该名称的公共程序在打开时运行,如果你有谁知道会发生什么两个单独的模块中的两个这样的过程。该名称也不是标准名称:Interface_Member此处不遵循公认且相当熟悉的约定(两个标识符之间有下划线):AutoExcel 对象模型中没有对象。

Private Sub Workbook_Open()是一个事件处理程序,处理接口的Open事件Workbook,它ThisWorkbook实现;像Auto_Open,它在工作簿打开时运行,但是它的机制更加透明,并且与所有其他事件处理过程完全一样:Workbook是接口,Open是事件/成员。

它是一个Workbook事件具有有趣的含义:以编程方式打开(从 VBA 代码)的工作簿将始终在启用宏的情况下打开 - 如果该工作簿具有Workbook_Open处理程序,则该宏将运行 - 但是它是一个实际事件意味着您的调用代码可以决定用 关闭它Application.EnableEvents = False

至于它没有运行,除非宏安全设置,我能想到的唯一原因是名称中是否有错字。永远不要手动键入事件处理程序签名 - 通过使用代码窗格顶部的下拉菜单,您可以让 VBE 为您生成正确的事件处理程序签名。

当左侧下拉列表包含对象/接口的名称,而右侧下拉列表包含事件/成员的名称时,您知道您正在查看事件处理程序:

工作簿_打开:

工作簿打开:


推荐阅读