VBA高级应用30例应用4:利用屏蔽事件来阻止自动运行事件

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴"实战",并做"战术总结",以便大家能很好的应用。教程的目的是要求大家在实际工作中分发VBA程序,写好的程序可以升级 。本套教程共三册三十个专题,本讲的内容是:VBA高级应用30例应用4:利用屏蔽事件来阻止自动运行事件

分享成果,随喜正能量】138 聪明人,抬人不抬杠;傻子,抬杠不抬人。聪明人,把别人抬得很高,别人高兴、舒服了,看你顺眼了,自然就愿意帮你!而傻人呢?不分青红皂白,和人家抬杠,别人不高兴、不舒服,怎么会愿意帮你呢?。

应用4 工作簿打开时阻止事件的自动运行

作为开发人员,需要经常打开包含VBA的文件,并运行代码。但并不总是这样,有时我们还想阻止某些代码的运行,最为典型的是工作簿打开事件中的某些特殊命令,如身份验证部分,我们在某些时候是希望阻止工作簿打开时自动运行的。这篇应用就是向大家展示如何实现这一点。为什么要这么做呢?通常,如果在自己的文件中使用了工作簿自动打开事件,而文件仍在开发中,自动运行Open事件可能需要一段时间才能运行代码,或者在开发文件的程序书写过程中,我们不希望在此时配置项目。

在实际应用中,我们要求用户在打开文件事件中处理某些任务时,一定要启动宏。如果没有设置启用宏,这些事件处理程序会保持禁用状态,这是我们不希望看到的。在这篇应用中,我会同时给大家展示如果用户禁用宏,将不能顺利处理工作簿的方法。但要注意,不信任的宏文件要小心处理。

2 利用屏蔽事件来阻止自动运行事件

现在我们来研究一下如何能绕过身份验证。这个应用中我提供了三种方法,这部分的方案是屏蔽事件。思路是屏蔽工作簿打开时的Workbook_Open事件。因为身份验证是写在了Workbook_Open事件中,所以如果能屏蔽这个事件,就成功地绕过了身份验证过程。这个思路是非常值得实践的。

为了实现上述思路,我们想到了工作簿的父级对象Application对象,这个对象代表整个 Microsoft Excel 应用程序。所以我们可以利用这个对象的某些属性设置来屏蔽某些对象的设置。这里需要利用的是EnableEvents 属性。

  • Application.EnableEvents 属性,如果指定对象已启用事件,此属性的值为 True。 读/写 Boolean。

语法:expression.EnableEvents

expression:表示 Application 对象的变量。

下面我们讲解屏蔽Workbook_Open事件,我们新建一个Excel工作簿,在通用模块中录入下面的代码:

Sub mynzEnableEvent()

Application.EnableEvents = False

End Sub

代码截图:

然后我们将光标放在代码中,点击运行按钮:

这时,我们点击有身份验证的工作簿:

这时我们发现,工作簿已经顺利地打开了:

这里我们再补充一点:

上面屏蔽事件的代码是写在了通用模块中,还可以写在即时窗口中,我们打开VBE窗口,按下CTRL+G组合键调出即时窗口,录入下面的代码:

Application.EnableEvents = False

截图如下:

同样需要把鼠标放在代码中,然后按下回车键,取得的效果是一样的。这里不再做截图演示。

  • 以上部分用到的程序文件:高级应用04_1.XLSM

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
say_fall7 分钟前
C语言容易被忽略的易错点(2)
c语言·开发语言
syker17 分钟前
NEWBASIC 2.06.7 API 帮助与用户使用手册
开发语言·人工智能·机器学习·自动化
Js_cold18 分钟前
Verilog运算符
开发语言·fpga开发·verilog
努力还债的学术吗喽33 分钟前
【项目】pyqt5基于python的照片整蛊项目
开发语言·python·qt
m0_5695310138 分钟前
shell(4)--shell脚本中的循环:(if循环,for,while,until)和退出循环(continue,break, exit)
开发语言
星释42 分钟前
Rust 练习册 :掌握文本处理与词频统计
开发语言·后端·rust
火龙谷43 分钟前
DrissionPage遇到iframe
开发语言·前端·javascript
HalvmånEver1 小时前
Linux的第二章 : 基础的指令(二)
linux·运维·服务器·开发语言·学习
egoist20231 小时前
[linux仓库]线程同步与生产者消费者模型[线程·陆]
linux·c语言·开发语言·线程同步·阻塞队列·生产者消费者模型
资深web全栈开发3 小时前
[特殊字符]图解 Golang 反射机制:从底层原理看动态类型的秘密
开发语言·后端·golang