在将实现我自己设计的接口的工作表转换为与接口相同类型的对象时,我遇到了类型错误。虽然这些不是 100% 可靠的(有时演员工作),但我无法确定情况背后的任何押韵或原因。
该问题在简化的环境中仍然存在,并且可以通过以下步骤清楚地看到(至少在 Excel 2010 中):
创建一个新工作簿,添加一个类模块,将其设为 public-non-createable 并将其命名为 ITest,创建一个名为 Tools 的标准模块(尽管我相信它可以有任何名称)并将以下内容粘贴到 ITest、Tools 的代码模块中, 和 Sheet1 分别为:
测试:
Option Explicit
Public Function Test() As Boolean
End Function
工具:
Option Explicit
Public Function IsRangeInSheetImplementingTest(rngIn As Excel.Range) As Boolean
Dim oWks As Object
Dim oITest As ITest
On Error Resume Next
Set oWks = rngIn.Worksheet
Set oITest = oWks
If Err.Number <> 0 Then
IsRangeInSheetImplementingTest = False
Else
IsRangeInSheetImplementingTest = True
End If
End Function
表 1:
Option Explicit
Implements ITest
Public Function ITest_Test() As Boolean
ITest_Test = True
End Function
您应该会发现调用IsRangeInSheetImplementingTest(Range("A1"))
返回False
。注释掉On Error Resume Next
表明这是由于Type Mismatch
在线Set oITest = oWks
. 谁能告诉我(1)为什么会发生这种情况以及(2)我能做些什么来使界面得到正确识别?
作为旁注,有时将相同的调用放在工作簿中的单元格中会产生正确的结果 - 但只是有时。对这里发生的事情感到非常困惑 - 非常感谢任何帮助!