Excel VBA 基础(05.1) - 事件
基础第四部分我们介绍了常用的扩展库,已经足够处理日常的绝大多数需求。剩下还有一些 VBA中的黑科技,比如与其他MS Office交互,从VBA调用Javascript以及 调用工作表文件的SQL接口等等,根据大家反馈相应地在 实战部分进行介绍。
进入第五部分之前,请尝试如下练习,
1、写出 匹配身份证号码的正则表达式Pattern。
2、将指定路径以及其子路径下的文件名逐行递归填充于指定工作表各行的第一个单元格中。
第五部分,我们来谈一谈 VBA的事件 以及异常处理 最后来介绍一下 图形界面部分以及用户表单。
首先来说一说,事件(Event),
还记得对象浏览器里面 闪电形状的小图标么。
与用户交互的过程中,程序会根据用户的操作进行相应的反馈。以网页编程以及JS为例,当用户单击某个按钮时会弹出相应提示窗口,此时 单击 这个用户操作 触发(evoke) 了 单击事件(onclick-Event)。回到VBA, 上图中Worksheet中有Activate事件,同理,可以理解为 用户激活该工作表时 会触发的激活工作表事件。
事件触发后,系统会调用 对应该事件的 回调函数(callback) 或 钩子函数(hook),例如单击所对应的弹窗函数为回调函数。
普通函数的调用完全由用户自定义,所谓回调函数可以理解为,以该事件发生为条件由系统自动调用的函数。因为与用户交互的过程中某个事件的发生与不发生,无法在程序编写时预先判断。但是 事先为 工作表激活事件 绑定 回调函数,系统会 监听 用户行为,一旦出现工作表激活事件,则会自动调用 预先定义的回调函数。
示例 5.1.1 , 万恶的 Worksheet.activate
编写VBA程序实现下列需求
1、有两张工作表 分别为 targ以及src,当前工作表为targ
2、实现如下数据保护,如果尝试激活src,则自动退出当前工作簿
3、在存在上述数据保护机制的前提下,将src工作表中第一行 第一列的数据复制到targ中
分析业务逻辑, 在src工作表 激活事件下定义 关闭工作簿的函数即可。
手上没有中文Excel请见谅。
VBA工程窗口,可以看到当前工作簿以及工作表的对象,双击 src工作表,右边的窗口的下拉列表会显示所有系统定义的工作表事件
选中相应事件 会自动生成指定事件的回调函数签名
我们需要 编写 激活 事件的回调函数。
Private Sub Worksheet_Activate()
ThisWorkbook.Close False
End Sub
此时我们在普通模块中编写复制数据的程序,
Option Explicit
Sub main()
Worksheets("targ").Cells(1, 1).Value = Worksheets("src").Cells(1, 1).Value
End Sub
Sub main_active()
Worksheets("src").Activate
Dim tmp