2015-11-02 64 views
0

如何在VBA中转换为接口类型?在VBA中转换为接口类型

Public Function createArray(ParamArray args() As Variant) As IArray 

    Dim arr As IArray 
    Set arr = New cRwArray 

    Select Case UBound(args) 

     'No params 
     Case -1 
      'Create decorator for empty array (no action required) 

     '1 params 
     Case 0 
      'Return array with range values 
      If TypeName(args(0)) = "cRwRange" Then 
       'Cast type 
       Dim range As iRange 
       range = ctype(args(0), iRange) 'IRange variable not defined 
       Call arr.readFromRange(range) 

    End Select 
    Set createArray = arr 
End Function 

编辑:这很奇怪。

Sub test() 

    Dim arr As IArray 
    Dim range As iRange 

    Set range = createRange("Sheet1", 20, 30) 
    Set arr = createArray(range) 

End Sub 

但是,类型设置不正确。
我在工厂检查此:

Debug.Print TypeName(args(0)) 'cRwRange, not the interface type? 
+0

您不需要 - 只需使用Set来指定对象。 – Rory

+0

@Rory似乎不幸的是,编译器抱怨'IRange'没有被识别为一个类型。它虽然存在,当将范围声明为IRange时没有抱怨。 – Trace

+0

'Set range = args(0)'错误信息是什么? – Rory

回答

0

您不必显式转换对象,如简单的赋值将工作:

Set range = args(0) 

此外,TypeName返回声明类型的对象;如果你想知道一个给定的对象是否实现特定的接口,你用TypeOf

If TypeOf range Is iRange Then 

例如。另外请注意,range对于Excel中的变量来说确实不是一个好名字...... :)

相关问题