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实践经验,全部浓缩在下面的各个教程中:

相关推荐
boooo_hhh19 分钟前
第J7周:对于ResNeXt-50算法的思考
开发语言·python·深度学习
LSL666_1 小时前
Java——多态
java·开发语言·多态·内存图
麓殇⊙1 小时前
CurrentHashMap的整体系统介绍及Java内存模型(JVM)介绍
java·开发语言·jvm
LSL666_2 小时前
Java——包装类
java·开发语言·包装类
yasuniko2 小时前
C++线程库
开发语言·c++
@老蝴2 小时前
C语言—指针2
c语言·开发语言
明月看潮生2 小时前
青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备
开发语言·青少年编程·rust·编程与数学
Pop–2 小时前
Vue3 el-tree:全选时只返回父节点,半选只返回勾选中的节点(省-市区-县-镇-乡-村-街道)
开发语言·javascript·vue.js
虚!!!看代码3 小时前
【JVM-GC调优】
java·开发语言·jvm