分享

Excel VBA解读(80):看看工作表会自动响应哪些操作——认识工作表事件

 zhangshoupen 2017-11-03

 

我们可以设置在工作表上进行操作时,工作表要做的事情,例如激活某工作表时弹出一个对话框、在单元格之间移动时高亮显示单元格所在的行列,等等。

 

这就要用到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



 

本文为原创文章,转载请注明出处。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多