今天聊聊工作表对象的事件。 前面讲工作簿对象Workbook时也有讲到事件。 工作簿事件是写在工程内的Thisworkbook当中。 而工作表事件的代码则是放在特定的工作表对象之中,而且只有特定工作表触发了事件后,相关的事件过程才会被执行。
首先我们看看工作表的事件代码放哪? 在工程资源管理器中,定位到特定的VBA工程当中,在文件夹模式中,可以看到有Microsof Excel 对象节点,展开后下面就有工程所在的工作簿内的所有工作表和ThisWorkbook。
双击特定的工作表对象,就会跳转到该对象的代码窗口中。 和之前的工作簿事件一样,在代码窗口的顶端左边是对象列表。 下拉列表,从中选择“WorkSheet”。
顶端右边的是过程/事件列表。 对象列表中选择Worksheet后,事件列表中就有工作表对象的所有事件过程。 只需选择相应的事件过程,过程描述就会自动插入到代码窗口中。 当代码窗口中已经有相应的事件过程后,选择相应的事件过程会直接跳转到代码窗口中的对应的过程当中。 关于事件过程的声明不需要记,系统已经帮我们定义好了,我们只需在过程/事件下拉列中选择即可添加好事件过程的声明部分,余下的部分只需要完善代码。
Worksheet.Activate 事件 激活工作表、图表工作表时发生此事件。 说明:新建窗口时不发生此事件。 切换两个显示同一工作簿的窗口时,将发生 WindowActivate 事件,但不发生工作簿的 Activate 事件。 示例: Private Sub Worksheet_Activate() Range("a1:a10").Sort Key1:=Range("a1"),Order:=xlAscending End Sub
Worksheet.Deactivate 事件 图表、工作表被停用时发生此事件。 示例: Private Sub Workbook_Deactivate() Application.Windows.Arrange xlArrangeStyleTiled End Sub 此示例在工作簿被停用时对所有打开的窗口进行排列。
Worksheet.BeforeDoubleClick 事件 当双击工作表时发生此事件,此事件先于默认的双击操作。 语法:BeforeDoubleClick(Target, Cancel) Target 必选,双击发生时最靠近鼠标指针的单元格。 Cancel 必选,事件发生时为 False。如果事件过程将此参数设为True,则在完成此过程后,不执行默认的双击操作。 说明: 使用 DoubleClick 方法并不触发此事件。 用户双击单元格的边框时不触发此事件。 通过设置Cancel为True,可以双击单元格不进入编辑模式。
Worksheet.BeforeRightClick 事件 右键单击工作表时发生此事件,此事件先于默认的右键单击操作。 语法:BeforeRightClick(Target, Cancel) Target 必选,右键单击发生时最靠近鼠标指针的单元格。 Cancel 必选,事件发生时为 False。
如果事件过程将此参数设为True,则在完成此过程后,不执行默认的右击单击操作。 与其他工作表事件相似,当指针在形状或命令栏(工具栏或菜单栏)上时,右键单击不触发此事件。 示例: Private SubWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim icbc As Object For Each icbc In Application.CommandBars("cell").Controls If icbc.Tag = "brccm" Then icbc.Delete Next icbc If Not Application.Intersect(Target, Range("b1:b10")) Is Nothing Then With Application.CommandBars("cell").Controls _ .Add(Type:=msoControlButton,before:=6, _ temporary:=True) .Caption = "New Context Menu Item" .OnAction = "MyMacro" .Tag = "brccm" End With End If End Sub 示例为 B1:B10 单元格添加新的快捷菜单项。
|