我怎样才能将一个工作表,实现和接口可靠的接口types的对象?
在将实现我自己devise的接口的工作表转换为与接口相同types的对象时,我遇到了types错误。 虽然这些并不是100%可靠(有时候是演员),但是我不能确定任何背后的情况或原因。
这个问题仍然存在于一个简化的环境中,可以通过以下步骤清楚地看到(至less在Excel 2010中):
创build一个新的工作簿,添加一个类模块,使其公共不可创build,并调用它ITest,创build一个称为工具(尽pipe我相信这可能有任何名称)的标准模块,并将以下粘贴到ITest,工具和Sheet1分别为:
ITEST:
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
工作表Sheet1:
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)我能做些什么来使界面正确识别?
作为一个方面说明,有时在工作簿中的一个单元格中放置相同的调用给出了正确的结果 – 但只是有时。 非常困惑,这是怎么回事 – 任何帮助,非常感谢!
我不能回答你的问题的第一部分(“为什么”),但经过自己的努力,我find了解决办法。
我在每个用于实现接口的工作表模块中都构build了一个Connect函数(在您的示例中为ITest)。 然后我用它来设置ITest的一个实例。
连接function非常简单:
' Place in the worksheet that implements the ITest interface Public Function Connect() As ITest Set Connect = Me End Function
在您的IsRangeInSheetImplementingTest
更换
Set oWks = rngIn.Worksheet
同
Set oWks = rngIn.Worksheet.Parent.Sheets(rngIn.Worksheet.Name).Connect
这是丑陋的,但每次都有效。