一、事件
程序开发中的事件指的是, 可以对某一行为进行监听、处理,比如单击、修改、打开等,vba 中可以按照级别将事件分为三类:Excel 程序级别事件、工作簿级别事件、工作表级别事件
监听和处理事件的代码,与以往写代码的位置不同,后面会分别介绍各级别事件的代码编写位置
二、工作表事件
工作表指的是平时使用 Excel 时常说的 Sheet 页,工作表事件就是对 Sheet 中的事件进行监听、处理
平时都会把 vba 代码写在模块中,而工作表的事件处理代码要分别写在目标 Sheet 的处理程序中,添加工作表事件处理函数的具体步骤如下:
- 在 <WPS表格 对象>文件夹中,找到目标工作表并打开
- 在右侧窗口选择事件级别为工作表级别 -
Worksheet
- 在右侧窗口选择具体的事件,事件选择后会自动生成函数结构,我们只需要在函数结构内添加自己的逻辑就可以了
工作表常用事件整理
事件名称 | 事件执行时机 |
---|---|
Change | 单元格内容改变时或单元格从编辑状态退出时 |
SelectionChange | 重新选取单元格时 |
Activate | 工作表被激活时 ( 从其他工作表切换回目标工作表时 ) |
Deactivate | 工作表被隐藏时 ( 从目标工作表切换到其他工作表时 ) |
BeforeDoubleClick | 工作表内鼠标双击时 |
BeforeRightClick | 工作表内鼠标i右键时 |
Calculate | 工作表内公式的结果改变时 |
FollowHyperlink | 点击超链接时 |
PivotTableUpdate | 图标更新时 |
单元格内容改变事件示例
三、工作簿事件
工作簿说的是 Excel 文件,工作簿事件就是对该文件的开打、关闭等事件进行监听,也可以对工作簿内所有的 Sheet 页的事件进行监听、处理
添加工作簿事件处理函数的具体步骤如下:
- 在 <WPS表格 对象> 文件夹中,找到
ThisWorkbook
并打开 - 在右侧窗口选择事件级别为工作簿级别 -
Workbook
- 在右侧窗口选择具体的事件,事件选择后会自动生成函数结构,我们只需要在函数结构内添加自己的逻辑就可以了
工作簿常用事件整理
事件名称 | 事件执行时机 |
---|---|
Open | 工作簿打开时 |
BeforeClose | 工作簿关闭时 |
BeforePrint | 工作簿打印时 |
NewSheet | 在工作簿中新建工作表时 |
BeforeSave | 保存时 |
WorkbookActivate | 焦点不在工作簿时 |
Desctivate | 工作簿隐藏时 (从目标工作簿切换到其他工作簿时) |
Activate | 工作簿显示时 (从其他工作簿切换到目标工作簿时) |
SheetChange | 工作簿内的单元格发生改变或从编辑状态退出时 |
工作簿激活事件示例
四、Excel 程序事件
工作表事件是针对一个 Sheet 页、工作簿事件是针对一个 Excel 文件、Excel 程序事件是针对整个 Excel 程序,既所有已打开或未来被打开的工作簿,当在一个工作簿中设置 Excel 程序事件后,只要该工作簿保持打开状态,那么其他打开的工作簿也都会具备相同的事件监听功能,这点跟宏的使用方式很像
也可以将设置程序事件的工作簿另存为宏文件( .xla
文件 ),然后让其他工作簿通过加载项的方式导入该宏,这样就算设置程序事件的工作簿关闭了,也不影响其他工作簿的事件功能
定义程序事件
- 找到代码编写位置,在 <WPS表格 对象> 文件夹中,找到
ThisWorkbook
并打开 - 添加事件级别代码
Public WithEvents app As Excel.Application
添加后,在事件级别下拉菜单中会生成程序级别 - 选择具体事件,选择后会自动生成事件函数结构,我们只需要在函数结构内添加自己的逻辑就可以了
- 添加下面固定代码,添加后我们需要重新打开当前工作簿让其生效
Private Sub workbook_open()
Set app = Excel.Application
End Sub
至此程序事件就设置完成了,只要该工作簿保持打开状态,其他所有已打开的或未来打开的工作簿就都会具备该工作簿中定义的程序事件处理,如果想关闭该工作簿后依然保留事件处理功能,那么就应该将工作簿另存为宏文件( .xla
文件 ),然后在加载项中导入该宏
工作簿打开的程序事件示例
可以看到,设置完程序事件(工作簿打开事件),并重新打开工作簿后,当前工作簿可以触发工作簿打开事件,再打开其他工作簿,其他工作簿同样也触发了工作簿打开事件