大家好,本节主要介绍事件的发生顺序,事件的关闭与开启的使用情境。
对于Excel事件的五种类别,已经分别介绍了工作表事件和工作簿事件。而不与对象相关的事件(即ontime方法和onkey方法)也在application主程序对象方法介绍过。(可通过蓝字链接查看。)
窗体和控件事件会在后面“窗体设计“的章节再具体介绍。图表事件如果后期介绍“控制图表"的内容再介绍。
事件的发生顺序
首先要介绍的一些常见事件的发生顺序,工作簿和工作表对象都对应很多事件。了解事件的产生顺序有助于理顺对事件的使用。
工作簿事件顺序
操作工作簿时常用的事件产生顺序如下:
1、workbook_open事件:打开工作簿时产生该事件
2、workbook_activate事件:打开工作簿时产生该事件。如果有多个工作簿,则切换工作簿时也将产生该事件
3、workbook_beforesave事件:保存工作簿之前产生该事件
4、workbook_beforeclose事件:关闭工作簿之前产生该事件
5、workbook_deactivate事件:关闭工作簿时,在beforeclose事件之后产生该事件,如果有多个工作簿,在切换工作簿时,非激活状态的工作簿将产生该事件。
工作表事件顺序
工作表的事件不多,但操作工作表时也可能触发一些工作簿事件,下面会列出一些常用工作表事件的产生顺序
第一种情况:当修改单元格中的内容后,再改变活动单元格时事件的产生顺序如下:
worksheet_change事件
workbook_sheetchange事件
worksheet_selectionchange事件
第二种情况:更改当前工作表时,事件的产生顺序如下:
worksheet_deactivate事件
workbook_sheetdeactivate事件
worksheet_activate事件
workbook_sheetactivate事件
事件的关闭与开启
顺带再说一下事件的关闭和开启问题,主要是用于防止运行的代码二次触发事件,形式如下:
Application.EnableEvents = False
代码
Application.EnableEvents = True
在change事件很常见,目的就是防止过程中的代码在修改单元格的值时第二次触发事件,导致无限循环。
下面先演示一个错误示例(无法停止,只能关闭excel文件。请勿模仿)。
在相应的工作表中,当用户更改了单元格的内容时,会第一次触发worksheet_change事件。
代码执行将单元格的值改为“内容已经更改”和弹窗。由于代码更改了单元格的内容。第二次触发了worksheet_change事件。单元格的值会再次更改和弹窗。(值虽然都是“内容已更改“,但可以触发了chang事件),导致形成循环。
所以正确使用方法,就是用户更改单元格触发worksheet_change事件时,在代码中把事件触发关闭。然后运行修改代码后,再恢复事件的触发。代码就正常的运行。
本节主要介绍事件的产生顺序,在涉及多个事件使用时注意下顺序即可,然后了解下事件的关闭和开启的使用情境。
后面两节会介绍几个Excel事件的综合示例,会串联一些以前介绍过的内容。祝大家学习快乐。