vba-variant:如何处理类与原始类型

时间:2014-02-05 08:50:10

标签: vba object variant

我的函数获取一个集合,项目可能是对象或基元 如何将项目分配给变体?

我现在所做的事情看起来像这样:

Dim vItem As Variant
On Error Resume Next
vItem = oCollection.Item(sKey)
If Err.Number = 91 Then
    Set vItem = oCollection.Item(sKey)
On Error GoTo 0

我认为它有效,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:2)

您可以使用varType()函数来测试类型,或者如果您要测试特定类型,则可以使用typeof。

        If VarType(oCollection.Item(sKey)) = vbObject Then
           Set vItem = oCollection.Item(sKey)
        Else
            vItem = oCollection.Item(sKey)
        End If

答案 1 :(得分:0)

对@SWa答案的一点改进是创建了一个辅助函数。这样可以避免复制/粘贴操作,例如op答案的oCollection.Item(sKey)部分。

Sub SetThisToThat(ByRef this As Variant, ByRef that As Variant)
    If IsObject(that) Then
        Set this = that
    Else
        this = that
    End If
End Sub

以一些测试为例:

Function Test()
    Call SetThisToThat(Test, "Function test")
End Function

Sub RunTest()
    MsgBox Test

    Dim s As String
    Call SetThisToThat(s, "Why must it be this hard?")
    MsgBox s
End Sub

@TmTron应该使用:

Call SetThisToThat(vItem, oCollection.Item(sKey))