我有一个公共不可创建界面PublicInterface
Option Explicit
Sub DoSomething()
End Sub
并且在same工作簿,我有一张纸,Sheet1
, that 实施 PublicInterface
Option Explicit
Implements PublicInterface
Private Sub PublicInterface_DoSomething()
Beep
End Sub
然后,在Module1
,我有代码尝试确定是否ThisWorkbook.ActiveSheet
属于类型PublicInterface
Sub testSheet()
Dim sht As Object
For Each sht In ThisWorkbook.Sheets
'DOES run
Debug.Print "Enumerated Sheet Is PublicInterface"
Next sht
If TypeOf ThisWorkbook.ActiveSheet Is PublicInterface Then
'*** Doesn't run ***
Debug.Print "ThisWorkbook.ActiveSheet Is PublicInterface"
End If
Debug.Print ThisWorkbook.ActiveSheet.Name
If TypeOf ThisWorkbook.ActiveSheet Is PublicInterface Then
'DOES run
Debug.Print "After getting an ActiveSheet property, ThisWorkbook.ActiveSheet Is PublicInterface"
End If
If TypeOf ThisWorkbook.Sheets(ThisWorkbook.ActiveSheet.Name) Is PublicInterface Then
'DOES Run
Debug.Print "ThisWorkbook.Sheets(ThisWorkbook.ActiveSheet.Name) Is PublicInterface"
End If
If TypeOf ThisWorkbook.Worksheets(ThisWorkbook.ActiveSheet.Name) Is PublicInterface Then
'DOES Run
Debug.Print "ThisWorkbook.Worksheets(ThisWorkbook.ActiveSheet.Name) Is PublicInterface"
End If
'Force the project to reset
End
End Sub
看起来TypeOf ThisWorkbook.ActiveSheet Is PublicInterface
回报False
如果项目已重置,但如果删除End
语句(这样项目就不会重置),并运行代码两次,它返回False
第一次,并且True
此后(直到项目重置),因为后续的代码行似乎force图纸类型的分辨率。同样,如果您单步执行代码,它会返回True
every time.
有趣的是,TypeOf Sheet1 Is PublicInterface
似乎有效。另外,同样的问题是not在实现接口时显而易见ThisWorkbook
,并使用TypeOf ThisWorkbook Is PublicInterface
确实返回True
这听起来像是 VBA 错误。我suspect它与工作表的编译时间有关。这是一个已知的问题?我在检查时做错了什么吗ThisWorkbook.ActiveSheet
?我似乎无法在常规课程中重现这种行为,无论是Private
or PublicNotCreatable
.
如果我需要检查工作簿的 ActiveSheet 是否实现接口,这可能是最安全的方法:
If TypeOf ThisWorkbook.Sheets(ThisWorkbook.ActiveSheet.Name) Is PublicInterface Then