Excel事件(四)事件顺序

2019-10-13 16:16:28 浏览数 (3)

大家好,本节主要介绍事件的发生顺序,事件的关闭与开启的使用情境。

对于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事件的综合示例,会串联一些以前介绍过的内容。祝大家学习快乐。


0 人点赞