Excel-VBA 快速上手(四、Excel 程序事件、工作簿事件、工作表事件)


一、事件


程序开发中的事件指的是, 可以对某一行为进行监听、处理,比如单击、修改、打开等,vba 中可以按照级别将事件分为三类:Excel 程序级别事件、工作簿级别事件、工作表级别事件

监听和处理事件的代码,与以往写代码的位置不同,后面会分别介绍各级别事件的代码编写位置

二、工作表事件


工作表指的是平时使用 Excel 时常说的 Sheet 页,工作表事件就是对 Sheet 中的事件进行监听、处理

平时都会把 vba 代码写在模块中,而工作表的事件处理代码要分别写在目标 Sheet 的处理程序中,添加工作表事件处理函数的具体步骤如下:

工作表事件代码书写步骤

  1. 在 <WPS表格 对象>文件夹中,找到目标工作表并打开
  2. 在右侧窗口选择事件级别为工作表级别 - Worksheet
  3. 在右侧窗口选择具体的事件,事件选择后会自动生成函数结构,我们只需要在函数结构内添加自己的逻辑就可以了

工作表常用事件整理

事件名称事件执行时机
Change单元格内容改变时或单元格从编辑状态退出时
SelectionChange重新选取单元格时
Activate工作表被激活时 ( 从其他工作表切换回目标工作表时 )
Deactivate工作表被隐藏时 ( 从目标工作表切换到其他工作表时 )
BeforeDoubleClick工作表内鼠标双击时
BeforeRightClick工作表内鼠标i右键时
Calculate工作表内公式的结果改变时
FollowHyperlink点击超链接时
PivotTableUpdate图标更新时

单元格内容改变事件示例
工作表单元格改变事件

三、工作簿事件


工作簿说的是 Excel 文件,工作簿事件就是对该文件的开打、关闭等事件进行监听,也可以对工作簿内所有的 Sheet 页的事件进行监听、处理

添加工作簿事件处理函数的具体步骤如下:

工作簿事件书写位置

  1. 在 <WPS表格 对象> 文件夹中,找到 ThisWorkbook并打开
  2. 在右侧窗口选择事件级别为工作簿级别 - Workbook
  3. 在右侧窗口选择具体的事件,事件选择后会自动生成函数结构,我们只需要在函数结构内添加自己的逻辑就可以了

工作簿常用事件整理

事件名称事件执行时机
Open工作簿打开时
BeforeClose工作簿关闭时
BeforePrint工作簿打印时
NewSheet在工作簿中新建工作表时
BeforeSave保存时
WorkbookActivate焦点不在工作簿时
Desctivate工作簿隐藏时 (从目标工作簿切换到其他工作簿时)
Activate工作簿显示时 (从其他工作簿切换到目标工作簿时)
SheetChange工作簿内的单元格发生改变或从编辑状态退出时

工作簿激活事件示例

工作簿激活事件

四、Excel 程序事件


工作表事件是针对一个 Sheet 页、工作簿事件是针对一个 Excel 文件、Excel 程序事件是针对整个 Excel 程序,既所有已打开或未来被打开的工作簿,当在一个工作簿中设置 Excel 程序事件后,只要该工作簿保持打开状态,那么其他打开的工作簿也都会具备相同的事件监听功能,这点跟宏的使用方式很像

也可以将设置程序事件的工作簿另存为宏文件( .xla 文件 ),然后让其他工作簿通过加载项的方式导入该宏,这样就算设置程序事件的工作簿关闭了,也不影响其他工作簿的事件功能

定义程序事件

程序事件书写位置

  1. 找到代码编写位置,在 <WPS表格 对象> 文件夹中,找到 ThisWorkbook并打开
  2. 添加事件级别代码 Public WithEvents app As Excel.Application 添加后,在事件级别下拉菜单中会生成程序级别
  3. 选择具体事件,选择后会自动生成事件函数结构,我们只需要在函数结构内添加自己的逻辑就可以了
  4. 添加下面固定代码,添加后我们需要重新打开当前工作簿让其生效
Private Sub workbook_open()
  Set app = Excel.Application
End Sub

至此程序事件就设置完成了,只要该工作簿保持打开状态,其他所有已打开的或未来打开的工作簿就都会具备该工作簿中定义的程序事件处理,如果想关闭该工作簿后依然保留事件处理功能,那么就应该将工作簿另存为宏文件( .xla 文件 ),然后在加载项中导入该宏

工作簿打开的程序事件示例

可以看到,设置完程序事件(工作簿打开事件),并重新打开工作簿后,当前工作簿可以触发工作簿打开事件,再打开其他工作簿,其他工作簿同样也触发了工作簿打开事件

程序事件-工作簿打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值