当前位置: 首页 > backend >正文

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



http://www.xdnf.cn/news/5044.html

相关文章:

  • Tomcat的`context.xml`配置详解!
  • 嵌入式系统架构验证工具:AADL Inspector v1.10 全新升级
  • 1、mongodb-- BSON 学习和JSON性能对比
  • 新一代电动门“攻克”行业痛点,远峰科技打造“智能出入”新标杆
  • ApplicationEventPublisher 深度解析:Spring 事件驱动模型的核心
  • 图像来源:基于协同推理的双视角超声造影分类隐式数据增强方法|文献速递-深度学习医疗AI最新文献
  • 软件系统中功能模型 vs 数据模型 对比解析
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.3 商品销售预测模型
  • C++线程库
  • ggplot2 | GO barplot with gene list
  • 深入探索DSPy:开启模块化AI编程的新篇章
  • Unity 日志存档功能
  • 数字化转型:概念性名词浅谈(第二十六讲)
  • c++ 命名空间
  • java的输入输出模板(ACM模式)
  • 软件测试——用例篇(2)
  • JavaScript与TypeScript深度对比分析
  • C++中volatile关键字详解
  • 赤色世界 陈默传 第一章 另一个陈默
  • 课程设计。。。。
  • 【C++设计模式之Strategy策略模式】
  • ISP流程介绍(Rgb格式阶段)
  • Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现
  • MySQL——七、索引
  • ArrayList和LinkedList区别
  • nginx的学习笔记
  • Android屏蔽通话功能和短信功能
  • AD 电阻容模型的创建
  • 68、微服务保姆教程(十一)微服务的监控与可观测性
  • 乌班图安装docker