自动打开子VBA

hid*_*guy 3 excel vba

我有一个宏,可以使用以下命令自动打开双击 Excel 工作簿:Sub Auto_Open()在模块中使用脚本,但在 VB 编辑器中使用相同的脚本ThisWorkbook但不使用模块:Private Sub Workbook_Open()不起作用。

有什么想法吗?直接自动打开有什么好处吗ThisWorkbook?如果后者可以完成,我不需要任何模块。

Mat*_*don 6

[Public] Sub Auto_Open()在标准/程序模块中是旧的/遗留的方法。除了它的名称之外,没有任何内容表明“此过程在工作簿首次打开时自动运行”,它如何连接以在打开时运行有点神奇:一个具有该名称的公共过程在打开时运行,谁知道如果您有会发生什么两个这样的程序位于两个单独的模块中。该名称也不标准:这里不遵循完善且相当熟悉的约定(两个标识符之间使用下划线): Excel 对象模型中Interface_Member没有对象。Auto

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

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

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

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

Workbook_Open:左侧为“工作簿”,右侧为“打开”

WorkbookOpen:左侧为“(常规)”,右侧为“WorkbookOpen”