如果我有一个可能返回对象或原始类型的函数,则可以在其中执行以下两种操作:

Function Result() As Variant 'may be object or not
    '... get item - the return value
    If IsObject(item) Then
        Set Result = item
    Else
        Result = item
    End If
End Function


但是,如何在不运行函数两次的情况下对存储Result的变量进行相同的测试?例如

Dim myResult As Variant
If IsObject(Result) Then 'test return type of function
    Set myResult = Result
Else
    myResult = Result
End If




myResult = Result 'fails if Result returns object
Set myResult = Result 'fails if Result returns non-object


我正在尝试将一系列对象/非对象写入变量类型的数组

最佳答案

一种可行的解决方案是通过传递ByRef直接写入变量。在标准模块中:

Property Let LetSet(ByRef variable As Variant, ByVal value As Variant)
    If IsObject(value) Then
        Set variable = value
    Else
        variable = value
    End If
End Sub


叫像

Dim myResult As Variant
LetSet(myResult) = 123                'myResult = 123
LetSet(myResult) = New Collection     'Set myResult = New Collection

07-26 08:07