Nic*_*las 4 excel vba excel-vba
如果a Chart已激活,则以下代码将用户返回到旧工作表,并显示Chart返回之前包含的数据点数.我想知道为什么变量Sh被定义为Object而不是Sheet在两个事件处理程序中.变量也一样OldSheet.
Dim OldSheet As Object
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Set OldSheet = Sh
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Msg As String
If TypeName(Sh) = "Chart" Then
Msg = "This chart contains "
Msg = Msg & ActiveChart.SeriesCollection(1).Points.Count
Msg = Msg & " data points." & vbNewLine
Msg = Msg & "Click OK to return to " & OldSheet.Name
MsgBox Msg
OldSheet.Activate
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
注意事件是SheetActivate,不是WorksheetActivate- "表"的概念包含几个没有任何共同点的类型,除了"激活"的能力.有没有Sheet在Excel对象模型类型-该Workbook.Sheets集合包含不同类型的对象,其中包括 Chart和Worksheet对象.
的Sh在参数SheetActivate事件具有是一个Object,因为有一个之间没有共同的接口Chart和一个Worksheet.
所以你需要做你做的事情:验证对象的类型,而不是假设你正在处理一个Chart或一个Worksheet对象.
TypeName您应该使用TypeOf运算符来代替使用函数并因此使用字符串类型检查:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeOf Sh Is Excel.Worksheet Then
Debug.Print "Worksheet!"
ElseIf TypeOf Sh Is Excel.Chart Then
Debug.Print "Chart!"
Else
Debug.Print "Something else!"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
该参数Object允许将来的版本激活在IWorkbookEvents每个Workbook对象实现的隐藏接口中编写事件声明时无法想到的类型的"工作表" .
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |