分享

Excel 工作簿、工作表事件例子

 望墨 2013-08-11

工作簿对象事件一览表
当工作簿更改、工作簿中的任何工作表更改、加载宏更改或数据透视表更改时,将引发工作簿事件。工作簿上的事件在默认情况下是可用的。若要查看工作簿的事件过程,请用鼠标右键单击处于还原状态或最小化状态的工作簿窗口标题栏,再单击快捷菜单上的“查看代码”。在“过程”下拉列表框内选择事件名称。

本示例在打开工作簿时将 Microsoft Excel 窗口最大化。
Sub Workbook_Open()
    Application.WindowState = xlMaximized
End Sub
       
Activate 事件
激活一个工作簿、工作表、图表或嵌入图表时产生此事件。
Private Sub object_Activate()
object      Chart、Workbook、或者 Worksheet。有关对 Chart 对象使用事件的详细信息,请参阅 图表对象事件的用法。
说明
切换两个显示同一个工作簿的窗口时,将产生 WindowActivate 事件,但不产生工作簿的 Activate 事件。
新建窗口时不产生本事件。
示例
当激活工作表时,本示例对 A1:A10 区域进行排序。
Private Sub Worksheet_Activate()
    Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub

AddinInstall 事件
当工作簿作为加载宏安装时,产生此事件。
Private Sub Workbook_AddinInstall()
示例
当指定工作簿作为加载宏安装时,本示例将一个控件添加到常用工具栏中。
Private Sub Workbook_AddinInstall()
    With Application.Commandbars("Standard").Controls.Add
        .Caption = "The AddIn's menu item"
        .OnAction = "'ThisAddin.xls'!Amacro"
    End With End Sub
End Sub
               
AddinUninstall 事件
当工作簿作为加载宏卸载时,产生此事件。
Private Sub Workbook_AddinUninstall()
说明
卸载加载宏时,该加载宏并不自动关闭。
示例
当指定工作簿作为加载宏卸载时,本示例将 Microsoft Excel 最小化。
Private Sub Workbook_AddinUninstall()
    Application.WindowState = xlMinimized
End Sub

BeforeClose 事件
在关闭工作簿之前,先产生此事件。如果该工作簿已经更改过,则本事件在询问用户是否保存更改之前产生。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel      当事件产生时为 False。如果该事件过程将本参数设为 True,则停止对工作簿的关闭操作,工作薄仍处于打开状态。
示例
本示例将 BeforeClose 事件的响应设置为保存工作簿的任何更改。
Private Sub Workbook_BeforeClose(Cancel as Boolean)
    If Me.Saved = False Then Me.Save
End Sub
         
BeforePrint 事件
在打印指定工作簿(或者其中的任何内容)之前,产生此事件。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel      当事件产生时为 False。如果该事件过程将本参数设为 True,则当该过程运行结束之后不打印工作簿。
示例
本示例在打印之前对当前活动工作簿的所有工作表重新计算。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    For Each wk in Worksheets
        wk.Calculate
    Next
End Sub

BeforeSave 事件
保存工作簿之前产生此事件。
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
SaveAsUi      如果显示“另存为”对话框,则为 True。
Cancel      当事件产生时为 False。如果该事件过程将本参数设为 True,则该过程执行结束之后不保存工作簿。
示例
本示例在保存工作簿之前询问用户是否保存。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
        Cancel as Boolean)
    a = MsgBox("Do you really want to save the workbook?", vbYesNo)
    If a = vbNo Then Cancel = True
End Sub
       
Deactivate 事件
图表、工作表或工作簿从活动状态转为非活动状态时产生此事件。
Private Sub object_Deactivate()
object      Chart、Workbook 或者 Worksheet。有关对 Chart 对象使用事件的详细信息,请参阅 Chart 对象事件的用法。
示例
本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列。
Private Sub Workbook_Deactivate()
    Application.Windows.Arrange xlArrangeStyleTiled
End Sub

NewSheet 事件
当在工作簿中新建工作表时产生此事件。
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh      新工作表。可以是一个 Worksheet 或 Chart 对象。
示例
本示例将新建的工作表移到工作簿的末尾。
Private Sub Workbook_NewSheet(ByVal Sh as Object)
    Sh.Move After:= Sheets(Sheets.Count)
End Sub
       
Open 事件
打开工作簿时,将产生本事件。
Private Sub Workbook_Open()
示例
每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口。
Private Sub Workbook_Open()
    Application.WindowState = xlMaximized
End Sub

PivotTableCloseConnection 事件
发生在数据透视表关闭与其数据源的连接之后。
Private Sub expression_PivotTableCloseConnection(ByVal Target As PivotTable)
expression      引用在类模块中带有事件声明的 Workbook 类型对象的变量。
Target    必需。选定的数据透视表。
示例
本示例显示一则消息,说明数据透视表与其数据源的连接已经关闭。本示例假定您已在类模块中声明了带有事件的 Workbook 类型的对象。
Private Sub ConnectionApp_PivotTableCloseConnection(ByVal Target As PivotTable)

    MsgBox "The PivotTable connection has been closed."

End Sub

PivotTableOpenConnection 事件
发生在数据透视表打开与其数据源的连接之后。
Private Sub expression_PivotTableOpenConnection(ByVal Target As PivotTable)
expression      引用在类模块中带有事件声明的 Workbook 类型对象的变量。
Target    必需。选定的数据透视表。
示例
本示例显示一则消息,说明数据透视表与其数据源的连接已经打开。本示例假定您已在类模块中声明了带有事件的 Workbook 类型的对象。
Private Sub ConnectionApp_PivotTableOpenConnection(ByVal Target As PivotTable)

    MsgBox "The PivotTable connection has been opened."

End Sub

SheetActivate 事件
当激活任何一张表时产生此事件。
Private Sub object_SheetActivate(ByVal Sh As Object)
object      Application 对象或 Workbook 对象。
Sh      激活的表。可以是一个 Chart 对象或 Worksheet 对象。
示例
本示例显示每一张激活的表的名称。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MsgBox Sh.Name
End Sub
       
SheetBeforeDoubleClick 事件
当双击任何工作表时产生此事件,此事件先于默认的双击操作发生。
Private Sub object_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, ByVal Cancel As Boolean)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Sh      代表该工作表的 Worksheet 对象。
Target      当双击事件发生时最靠近鼠标指针的单元格。
Cancel      当事件发生时为 False。如果事件过程将该参数设为 True,则该过程执行完之后将不进行默认的双击操作。
说明
图表不产生该事件。
示例
本示例关闭默认的双击操作。
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
        ByVal Target As Range, ByVal Cancel As Boolean)
    Cancel = True
End Sub

SheetBeforeRightClick 事件
当用鼠标右键单击任一工作表时产生此事件,此事件先于默认的右键单击操作。
Private Sub object_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, ByVal Cancel As Boolean)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Sh      代表该工作表的 Worksheet 对象。
Target      当右键单击事件发生时最靠近鼠标指针的单元格。
Cancel      当事件产生时为 False。如果该事件过程将本参数设为 True,则该过程执行结束之后将不执行默认的右键单击操作。
说明
图表不产生该事件。
示例
本示例关闭默认的右键单击操作。有关其他示例的详细信息。请参阅 BeforeRightClick 事件示例。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
        ByVal Target As Range, ByVal Cancel As Boolean)
    Cancel = True
End Sub

SheetCalculate 事件
当对工作表重新计算或者在图表上重新绘制发生更改的数据点时产生此事件。
Private Sub object_SheetCalculate(ByVal Sh As Object)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Sh      工作表。可以是一个 Chart 对象或 Worksheet 对象。
示例
当计算工作簿中的任何工作表时,本示例对第一张工作表的 A1:A100 区域进行排序。
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    With Worksheets(1)
        .Range("a1:a100").Sort Key1:=.Range("a1")
    End With
End Sub
       
SheetChange 事件
当用户更改工作表中的单元格或者外部链接引起单元格的更改时,产生此事件。
Private Sub object_SheetChange(ByVal Sh As Object, ByVal Source As Range)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Sh      代表该工作表的 Worksheet 对象。
Source      发生更改的区域。
说明
图表不产生该事件。
示例
当任一工作表发生更改时,运行本示例。
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
        ByVal Source As Range)
    ' runs when a sheet is changed
End Sub
      
SheetDeactivate 事件
当任一工作表由活动状态转为非活动状态时产生此事件。
Private Sub object_SheetDeactivate(ByVal Sh As Object)
object      Application 对象或 Workbook 对象。
Sh      工作表。可以是一个 Chart 对象或 Worksheet 对象。
示例
本示例显示每一非活动工作表的名称。
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    MsgBox Sh.Name
End Sub
               
SheetFollowHyperlink 事件
单击 Microsoft Excel 中的任意超链接时发生此事件。对于工作表级的事件,请参阅“帮助”主题中的 FollowHyperlink 事件。
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Sh      Object 类型,必需。表示包含该超链接的 Worksheet 对象。
Target      Hyperlink 类型,必需。一个 Hyperlink 对象,该对象代表超链接的目标位置。
示例
本示例对当前工作簿中所有已单击过的超链接保留一个列表或历史记录,其中也包括含有这些超链接的工作表名称。
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh as Object, _
    ByVal Target As Hyperlink)
    UserForm1.ListBox1.AddItem Sh.Name & ":" & Target.Address
    UserForm1.Show
End Sub

SheetPivotTableUpdate 事件
发生在数据透视表的工作表更新之后。
Private Sub expression_SheetPivotTableUpdate(ByVal Sh As Object, Target As PivotTable)
expression      引用在类模块中带有事件声明的 Applicaton 类型或 Workbook 类型对象的变量。
Sh      必需。选定的工作表。
Target      必需。选定的数据透视表。
示例
本示例显示一则消息,说明数据透视表已经更新。本示例假定您已在类模块中声明了带有事件的 Application 类型或 Workbook 类型的对象。
Private Sub ConnectionApp_SheetPivotTableUpdate(ByVal shOne As Object, Target As PivotTable)

    MsgBox "The SheetPivotTable connection has been updated."

End Sub
       
SheetSelectionChange 事件
任一工作表上的选定区域发生更改时,将产生本事件。(但图表上的选定对象发生改变时,不会产生本事件。)
Private Sub object_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Sh      新选定的区域所在的工作表。
Target      新选定的区域。
示例
本示例在状态栏上显示选定区域所在的工作表名称及选定区域的地址。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
        ByVal Target As Excel.Range)
    Application.StatusBar = Sh.Name & ":" & Target.Address
End Sub
               
WindowActivate 事件
工作簿的窗口激活时,将产生本事件。
Private Sub object_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Wb      仅用于 Application 对象。显示在活动窗口中的工作簿。
Wn      激活的窗口。
示例
本示例使工作簿窗口激活时最大化。
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
    Wn.WindowState = xlMaximized
End Sub
       
WindowDeactivate 事件
工作簿的窗口变为非活动状态时,将产生本事件。
Private Sub object_WindowDeactivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Wb      仅用于 Application 对象。非活动状态的窗口中的工作簿。
Wn      非活动状态的窗口。
示例
本示例使工作簿窗口变为非活动状态时最小化。
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
    Wn.WindowState = xlMinimized
End Sub
               
WindowResize 事件
工作簿窗口调整大小时,将产生本事件。
Private Sub object_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
object      Application 对象或 Workbook 对象。有关对 Application 对象使用事件的详细信息,请参阅 Application 对象事件的用法。
Wb      仅用于 Application 对象。在调整大小的窗口中显示的工作簿。
Wn      调整大小的窗口。
示例
工作簿窗口调整大小时,将运行本示例。
Private Sub Workbook_WindowResize(ByVal Wn As Excel.Window)
    Application.StatusBar = Wn.Caption & " resized"
End Sub

 

Worksheet 对象事件一览表
工作表上的事件在默认情况下是可用的。若要查看工作表的事件过程,请用鼠标右键单击工作表标签,再单击快捷菜单上的“查看代码”。在“过程”下拉列表框内选择事件名称。

工作表级事件发生在工作表被激活、用户更改工作表上的单元格或数据透视表更改时。下例在工作表重新计算时就调整 A 列到 F 列的大小。
Private Sub Worksheet_Calculate()
    Columns("A:F").AutoFit
End Sub               
有些事件可用于将某操作取代默认的应用程序操作,或对默认操作进行一些小改动。下例捕获了右键单击事件,并在单元格区域 B1:B10 的快捷菜单中添加了新的菜单项。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
        Cancel As Boolean)
    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
Activate 事件
激活一个工作簿、工作表、图表或嵌入图表时产生此事件。
Private Sub object_Activate()
object      Chart、Workbook、或者 Worksheet。有关对 Chart 对象使用事件的详细信息,请参阅 图表对象事件的用法。
说明
切换两个显示同一个工作簿的窗口时,将产生 WindowActivate 事件,但不产生工作簿的 Activate 事件。
新建窗口时不产生本事件。
示例
当激活工作表时,本示例对 A1:A10 区域进行排序。
Private Sub Worksheet_Activate()
    Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub
       
Deactivate 事件
图表、工作表或工作簿从活动状态转为非活动状态时产生此事件。
Private Sub object_Deactivate()
object      Chart、Workbook 或者 Worksheet。有关对 Chart 对象使用事件的详细信息,请参阅 Chart 对象事件的用法。
示例
本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列。
Private Sub Workbook_Deactivate()
    Application.Windows.Arrange xlArrangeStyleTiled
End Sub
       
BeforeDoubleClick 事件
当双击某工作表时产生此事件,此事件先于默认的双击操作。
Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
expression      引用在类模块中带有事件声明的 Worksheet 类型对象的变量。
Target    必需。双击发生时最靠近鼠标指针的单元格。
Cancel    可选。当事件发生时为 False。如果事件过程将该参数设为 True,则该过程执行完之后将不进行默认的双击操作。
说明
使用 DoubleClick 方法并不触发本事件。
用户双击单元格的边框时不触发本事件。

BeforeRightClick 事件
当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作。
Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
expression      引用在类模块中带有事件声明的 Worksheet 类型对象的变量。
Target      必需。右键单击发生时最靠近鼠标指针的单元格。
Cancel    可选。当事件发生时为 False。如果该事件过程将本参数设为 True,则该过程执行结束之后不进行默认的右键单击操作。
说明
与其他工作表事件相似,当指针位置在图形或命令栏(工具栏或者菜单栏)上时,右键单击不触发本事件。
示例
应用于 Worksheet 对象。
本示例为 B1:B10 单元格添加新的快捷菜单项。
Private Sub Worksheet_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

Calculate 事件
对于 Chart 对象,在图表对新的数据点或者更改的数据点绘制之后产生此事件。对于 Worksheet 对象,在对工作表进行重新计算之后产生此事件。
Private Sub object_Calculate()
object     Chart 或者 Worksheet。有关对 Chart 对象使用事件的详细内容,请参阅 Chart 对象事件的用法。
示例
每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。
Private Sub Worksheet_Calculate()
    Columns("A:F").AutoFit
End Sub
               

Change 事件
当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件。
Private Sub Worksheet_Change(ByVal Target As Range)
Target      更改的区域。可以是多个单元格。
说明
重新计算引起的单元格更改不触发本事件。可使用 Calculate 事件俘获工作表重新计算操作。
示例
本示例将更改的单元格的颜色设为蓝色。
Private Sub Worksheet_Change(ByVal Target as Range)
    Target.Font.ColorIndex = 5
End Sub

FollowHyperlink 事件
当单击工作表上的任意超链接时,发生此事件。对于应用程序级或工作簿级的事件,请参阅 SheetFollowHyperlink 事件。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Target   Hyperlink 类型,必需。一个代表超链接目标位置的 Hyperlink 对象。
示例
本示例对在当前活动工作簿中访问过的所有链接保留一个列表或历史记录。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    With UserForm1
        .ListBox1.AddItem Target.Address
        .Show
    End With
End Sub
       
PivotTableUpdate 事件
发生在工作簿中的数据透视表更新之后。
Private Sub expression_PivotTableUpdate(ByVal Target As PivotTable)
expression      引用在类模块中带有事件声明的 Worksheet 类型对象的变量。
Target  必需。选定的数据透视表。
示例
本示例显示一则消息,说明数据透视表已经更新。本示例假定您已在类模块中声明了带有事件的 Worksheet 类型的对象。
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    MsgBox "The PivotTable connection has been updated."

End Sub

SelectionChange 事件
当工作表上的选定区域发生改变时,将产生本事件。
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Target      新选定的区域。
示例
本示例滚动工作簿窗口,直至选定区域位于窗口的左上角。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With ActiveWindow
        .ScrollRow = Target.Row
        .ScrollColumn = Target.Column
    End With
End Sub

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多