我们可以设置在工作表上进行操作时,工作表要做的事情,例如激活某工作表时弹出一个对话框、在单元格之间移动时高亮显示单元格所在的行列,等等。
这就要用到Worksheet对象的事件。
Worksheet对象的事件并不多,共9个,如图1所示。
图1
其中,各个事件发生条件为:
Activate事件发生在工作表成为当前活动工作表时
BeforeDoubleClick事件发生在工作表单元格中双击时发生且在默认的双击操作之前
BeforeRightClick事件发生在工作表单元格中右击时发生且在默认的右击操作之前
Calculate事件发生在重新计算工作表后
Change事件发生在工作表单元格被修改后
Deactivate事件发生在转移到并使其他工作表为活动工作表前
FollowHyperlink事件发生在单击工作表中的超链接时
PivotTableUpdate事件发生在更新工作表中数据透视表后
SelectionChange事件发生在改变工作表单元格选择时
下面分别详细介绍这些事件。
Activate事件
Worksheet_Activate()
在工作表成为活动工作表时触发该事件。
Deactivate事件
Worksheet_Deactivate()
当转移到其他工作表时触发该事件。
示例1:激活当前工作表与转移到其他工作表时的事件响应
以工作表Sheet2为例,当激活使工作表Sheet2成为活动工作表时,以及转移到其他工作表时,分别显示相应的消息框。
Private Sub Worksheet_Activate()
MsgBox 'Hi!欢迎来到【完美Excel】.', , 'excelperfect'
End Sub
Private Sub Worksheet_Deactivate()
MsgBox '谢谢你的来访!', , '完美Excel'
End Sub
代码效果如图2所示。
图2
BeforeDoubleClick事件
Worksheet_BeforeDoubleClick(ByValTarget As Range, Cancel As Boolean)
当双击工作表单元格时触发该事件。
参数Target代表工作表中所选取的单元格或单元格区域。
参数Cancel设置是否允许默认的操作,缺省值为False。若设置为True,则不允许按照双击单元格方式来输入数据。
示例2:双击单元格自动添加背景色
在用户双击工作表单元格区域A1:C3中的任意单元格时,会自动为该单元格添加红色作为背景色。代码如下:
Private Sub Worksheet_BeforeDoubleClick(ByValTarget As Range, Cancel As Boolean)
If Not Intersect(Target, Range('A1:C3')) Is Nothing Then
Cancel = True
Target.Interior.Color = vbRed
End If
End Sub
代码效果如图3所示。
图3
BeforeRightClick事件
Worksheet_BeforeRightClick(ByValTarget As Range, Cancel As Boolean)
在单元格或单元格区域中单击右键时触发该事件。
参数Target代表工作表中所选取的单元格或单元格区域。
参数Cancel设置是否允许默认的操作,缺省值为False。若设置为True,则不显示默认的快捷菜单。
示例3:阻止显示缺省的快捷菜单
当工作表单元格中的数据为“”时,选择该单元格后单击右键,不会出现缺省的快捷菜单。代码如下:
Private SubWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Value = '完美Excel' Then
Cancel = True
End If
End Sub
代码效果如图4所示。
图4
Calculate事件
Worksheet_Calculate()
当工作表被重新计算时触发该事件。
示例4:根据计算结果输入数值并设置格式
下面的代码演示当工作表单元格B2中的数值大于B3中的数值时,在B4中显示两个值的差并设置该单元格的背景色为红色。
Private Sub Worksheet_Calculate()
If Range('B2').Value > Range('B3') Then
Range('B4').Value =Range('B2').Value - Range('B3')
Range('B4').Interior.Color =vbRed
Else
Range('B4').Clear
End If
End Sub
运行效果如图5所示。
图5
Change事件
Worksheet_Change(ByValTarget As Range)
当修改单元格中的数据时触发该事件。
参数Target代表工作表中所选取的单元格或单元格区域。
示例5:提示用户不要修改数据
下面的代码在用户修改工作表单元格区域A1:C3中的数据时,给出提示信息。
Private Sub Worksheet_Change(ByValTarget As Range)
If Not Intersect(Target, Range('A1:C3')) Is Nothing Then
MsgBox '该区域数据重要,请不要修改!'
End If
End Sub
运行效果如图6所示。
图6
FollowHyperlink事件
Worksheet_FollowHyperlink(ByValTarget As Hyperlink)
当单击含有超链接的单元格时触发该事件。
PivotTableUpdate事件
Worksheet_PivotTableUpdate(ByValTarget As PivotTable)
当更新数据透视表时触发该事件。
SelectionChange事件
Worksheet_SelectionChange(ByValTarget As Range)
当工作表中选择的单元格改变时触发该事件。
参数Target代表工作表中所选取的单元格或单元格区域。
示例6:高亮显示单元格所在的行列
下面的代码高亮显示工作表单元格所在的行列:
Private SubWorksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
With Target
.EntireRow.Interior.Color = vbRed
.EntireColumn.Interior.Color = vbRed
End With
End Sub
运行效果如图7所示。
图7
本文为原创文章,转载请注明出处。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
联系客服