我的函数获取一个集合,项目可能是对象或基元 如何将项目分配给变体?
我现在所做的事情看起来像这样:
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
我认为它有效,但我想知道是否有更好的方法。
答案 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))