vba - 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.
解决方案
[Public] Sub Auto_Open()
在标准/程序模块中是旧的/传统的方式。除了它的名字之外没有什么说“这个程序在第一次打开工作簿时自动运行”,它是如何连接到打开运行的有点神奇:一个名为该名称的公共程序在打开时运行,如果你有谁知道会发生什么两个单独的模块中的两个这样的过程。该名称也不是标准名称:Interface_Member
此处不遵循公认且相当熟悉的约定(两个标识符之间有下划线):Auto
Excel 对象模型中没有对象。
Private Sub Workbook_Open()
是一个事件处理程序,处理接口的Open
事件Workbook
,它ThisWorkbook
实现;像Auto_Open
,它在工作簿打开时运行,但是它的机制更加透明,并且与所有其他事件处理过程完全一样:Workbook
是接口,Open
是事件/成员。
它是一个Workbook
事件具有有趣的含义:以编程方式打开(从 VBA 代码)的工作簿将始终在启用宏的情况下打开 - 如果该工作簿具有Workbook_Open
处理程序,则该宏将运行 - 但是它是一个实际事件意味着您的调用代码可以决定用 关闭它Application.EnableEvents = False
。
至于它没有运行,除非宏安全设置,我能想到的唯一原因是名称中是否有错字。永远不要手动键入事件处理程序签名 - 通过使用代码窗格顶部的下拉菜单,您可以让 VBE 为您生成正确的事件处理程序签名。
当左侧下拉列表包含对象/接口的名称,而右侧下拉列表包含事件/成员的名称时,您知道您正在查看事件处理程序:
推荐阅读
- javascript - 如何防止 div 相互重叠以及如何使它们在另一个 div 边界内移动
- swift - 如何将多个文件中的 IBOutlets 连接到 Storyboard 中的同一个对象?
- java - Android 蓝牙输入流未按预期读取
- nginx - 使用 Google Domains 和 NGINX 指向子域
- error-handling - 在 TCL 的事件循环中是否有一个 bgerror 钩子等效于未捕获的错误?
- ionic5 - Ionic v5 cometchat 视频通话功能无法正常工作
- flutter - 在通道 plugins.flutter.io/firebase_admob 上找不到方法初始化的实现
- python - Jinja2 输出 Markdown Frontmatter 到列表
- python - 打印时输出中有多余的行
- haxeflixel - HaxeFlixel 无法编译为 HTML5