本文为《Excel 2016应用大全》扩展内容 事件就是由Excel用户或者系统触发的,可以在VBA代码中进行响应的代码组合。 例如:当工作表被激活、选中单元格、更改单元格内容等操作都可以触发一系列的相关事件。通过编写VBA代码响应这些事件,当事件被触发时,将运行事件过程执行进行相应的操作。 事件过程作为一种特殊的Sub过程,在满足特定条件时被触发执行,如果事件过程包含参数,系统会为相关参数赋值。 事件过程必须写入相应的模块中才能发挥其作用,例如:工作簿事件过程须写入ThisWorkbook模块中,工作表事件过程则须写入相应的工作表模块中,且只有过程所在工作表的行为可以触发该事件。 事件过程作为一种特殊的Sub过程,在VBA中已经规定了每个事件过程的名称和参数。 用户可以【代码】窗口中手工输入事件过程的全部代码,但是更便捷的方法是在【代码】窗口中选择相应的对象和事件,VBE将自动在【代码】窗口中添加事件过程的声明语句和结束语句。 在【代码】窗口上部左侧的【对象】下拉框中选中Worksheet,在右侧的【事件】下拉框中选中Change,Excel将自动在【代码】窗口中输入如图 48-1所示的工作表Change事件过程代码框架。 图 48-1 【代码】窗口中快速添加事件代码框架 事件过程的代码需要写入在Sub和End Sub之间,在代码中可以使用事件过程参数,不同的事件过程,其参数也不尽相同。 通过示例 48.2和示例 48.4的学习可以知道,工作簿对象的SheetSelectionChange事件和Worksheet对象的SelectionChange事件的触发条件是相同的。 但是,Excel应用程序在任何时刻都只能执行唯一的代码,即无法实现并行处理事件代码。 如果同时使用此类触发条件相同的事件,就需要预先确切地知道事件的优先级,即相同条件下事件被激活的先后次序。这些优先级顺序并不需要大家刻意去记忆,可以利用代码轻松的获知事件的优先级。 新建一个Excel工作簿文件,按 在【工程资源管理器】中双击“ThisWorkbook”,在右侧的【代码】窗口中输入如下代码。 #001 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Range) #002 MsgBox ' Workbook_SheetSelectionChange事件' ,vbInformation #003 End Sub 在【工程资源管理器】中双击活动工作表,在右侧的【代码】窗口中输入如下代码。 #001 Private Sub Worksheet_SelectionChange(ByVal Target As Range) #002 MsgBox 'Worksheet_SelectionChange事件' ,vbInformation #003 End Sub 返回Excel界面中,在活动工作表中选中任意单元格。Excel将依次显示两个提示对话框,如图 48-6所示。 图 48-6 事件的激活顺序 由此可知,工作表的SelectionChange事件先于工作簿的SheetSelectionChange事件被激活。 对于其他的多个事件激活顺序可以采用类似的方法进行验证。 |
|