本文详细讲解Workbook对象的3个事件:SheetActivate事件、SheetDeactivate事件和SheetSelectionChange事件。
Workbook_SheetActivate事件 当激活任意工作表时发生Workbook_SheetActivate事件。其语法为: Workbook_SheetActivate(ByVal Sh As Object)
说明:
在ThisWorkbook代码模块中输入下面的代码,当激活工作表时弹出一个显示该工作表名字的消息框: Private SubWorkbook_SheetActivate(ByVal Sh As Object) MsgBox '当前工作表是:' & Sh.Name End Sub
Workbook_SheetDeactivate事件 当使工作表变为非活动工作表时发生Workbook_SheetDeactivate事件。其语法为: Workbook_SheetDeactivate(ByVal Sh As Object)
说明:
在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)
说明:
在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
此时,当用户修改任意工作表名称时,工作表名称会恢复原名,并弹出“您不能修改工作表名称”的提示。
|
|