分享

Excel VBA解读(93):工作簿对象的SheetActivate、SheetDeactivat...

 L罗乐 2018-05-02


本文详细讲解Workbook对象的3个事件:SheetActivate事件、SheetDeactivate事件和SheetSelectionChange事件。

 

Workbook_SheetActivate事件

当激活任意工作表时发生Workbook_SheetActivate事件。其语法为:

Workbook_SheetActivate(ByVal Sh As Object)

 

说明:

  • 参数Sh,必需,表示被激活的工作表,可以是图表工作表或标准工作表。

 

ThisWorkbook代码模块中输入下面的代码,当激活工作表时弹出一个显示该工作表名字的消息框:

Private SubWorkbook_SheetActivate(ByVal Sh As Object)

   MsgBox '当前工作表是:' & Sh.Name

End Sub

 

Workbook_SheetDeactivate事件

当使工作表变为非活动工作表时发生Workbook_SheetDeactivate事件。其语法为:

Workbook_SheetDeactivate(ByVal Sh As Object)

 

说明:

  • 参数Sh,必需,表示变为非活动工作表的工作表,可以是图表工作表或标准工作表。

 

ThisWorkbook代码模块中输入下面的代码,当使工作表变为非活动工作表时弹出一个显示该工作表名字的消息框:

Private SubWorkbook_SheetDeactivate(ByVal Sh As Object)

   MsgBox '走了,工作表:' & Sh.Name

End Sub

 

SheetActivate事件和SheetDeactivate事件都存在时,先发生SheetDeactivate事件,再发生SheetActivate事件。

 

Workbook_SheetSelectionChange事件

当改变任意工作表(图表工作表除外)的单元格选择时发生Workbook_SheetSelectionChange事件。其语法为:

Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal TargetAs Range)

 

说明:

  • 参数Sh,必需,包含新的单元格选区的工作表。

  • 参数Target,必需,新选择的单元格区域。

 

ThisWorkbook代码模块中输入下面的代码,将在工作簿状态栏中显示当前工作表名称和所选区域的地址:

Private Sub Workbook_SheetSelectionChange(ByValSh As Object, ByVal Target As Range)

   Application.StatusBar = Sh.Name & ':' & Target.Address

End Sub

 

示例1:只允许访问指定的工作表

下面的代码总是使工作簿中的第1个工作表为当前工作表,限制对其他工作表的访问。

Private SubWorkbook_SheetActivate(ByVal Sh As Object)

    '1修改为允许访问的工作表索引号或名称

   Worksheets(1).Activate

End Sub

 

示例2:限制用户必须包含指定内容

下面的代码确定工作表Sheet1的单元格A1的内容为“完美Excel”,否则不能访问其他工作表。

Private SubWorkbook_SheetDeactivate(ByVal Sh As Object)

   If Sheet1.Range('A1') <> '完美Excel' Then

        MsgBox 'Sheet1工作表的单元格A1的内容必须是''完美Excel'''

        Sheet1.Activate

   End If

End Sub

 

示例3:限制用户必须在指定区域中操作

下面的代码限制用户必须在工作表Sheet1的单元格区域“A1:D3”中进行操作:

Private SubWorkbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

   Dim rng As Range

   

   Set rng = Sheet1.Range('A1:D3')

   

   If Sh.Name = 'Sheet1' Then

        If Intersect(Target, rng) Is NothingThen

            Sheet1.Range('A1').Select

        End If

   End If

End Sub

 

在工作表Sheet1中,选择单元格区域A1:D3之外的单元格时,会自动跳到单元格A1,如下图1所示。

1

 

示例4:阻止用户修改工作表名称

Excel中没有能够阻止用户修改工作表名称的事件,因此只能联合已有的事件实现这一功能。下面是ThisWorkbook代码模块中的代码:

Privatemstr_ActiveSheetPreviousName As String

Private lng_DeactivedSheetIndex AsLong

Private mstr_ActiveSheetName AsString

 

Private Sub Workbook_Open()

   mstr_ActiveSheetPreviousName = ThisWorkbook.ActiveSheet.Name

End Sub

 

Private SubWorkbook_SheetDeactivate(ByVal Sh As Object)

   lng_DeactivedSheetIndex = Sh.Index

   SheetNameChange 0

End Sub

 

Private SubWorkbook_SheetActivate(ByVal Sh As Object)

   SheetNameChange 1

End Sub

 

Private SubWorkbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

   SheetNameChange 2

End Sub

 

Sub SheetNameChange(ByVallngCaller As Long)

   Select Case lngCaller

        Case 0

            If lng_DeactivedSheetIndex <>ThisWorkbook.ActiveSheet.Index Then

                IfThisWorkbook.Sheets(lng_DeactivedSheetIndex).Name <>mstr_ActiveSheetPreviousName Then

                   ThisWorkbook.Sheets(lng_DeactivedSheetIndex).Name =mstr_ActiveSheetPreviousName

                    mstr_ActiveSheetPreviousName =mstr_ActiveSheetName

                    NameChanged

                End If

            End If

        Case 1

            mstr_ActiveSheetPreviousName =ThisWorkbook.ActiveSheet.Name

            mstr_ActiveSheetName = ThisWorkbook.ActiveSheet.Name

        Case 2

            mstr_ActiveSheetName =ThisWorkbook.ActiveSheet.Name

            If mstr_ActiveSheetName <>mstr_ActiveSheetPreviousName Then

                ThisWorkbook.ActiveSheet.Name =mstr_ActiveSheetPreviousName

                NameChanged

            End If

   End Select

End Sub

 

Sub NameChanged()

   MsgBox '您不能修改工作表名称!'

End Sub

 

此时,当用户修改任意工作表名称时,工作表名称会恢复原名,并弹出“您不能修改工作表名称”的提示。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多