2017-09-29 1 views
1

私は次のようにその値が、サーバ要求の結果に応じて、数またはオブジェクトインスタンスのいずれかである変数に値を代入しています:バリアントに関数値を割り当てる方法は、その関数がオブジェクトを返すことができる場合ですか?

Sub assignVar() 

Dim v As Variant 

v = getValue 

End Sub 

Function getValue() As Variant 

Dim result As Boolean 

result = PostSomethingToServer() 
If result Then 
    getValue = 1 
Else 
    Set getValue = New Dictionary 
    getValue.Add "a", 1 
End If 

End Function 

IはassignVar(true)を呼び出す場合、これは正常に動作し、私はその後、assignVar(false)を呼び出す場合、私はエラーを取得:

Wrong number of arguments or invalid property assignment 

getValue()がオブジェクトを返す場合、それはset v = getValueとして割り当てる必要があるので、予想されるようになります。しかし、私がステートメントを使って整数を割り当てようとしているので、このように書くとType mismatchというエラーが出ます。

戻り値がgetValue()の場合、vが正しく割り当てられるようにするにはどうすればよいですか?次のように

Option Explicit 

Public value As Variant 
Public valueIsObject As Boolean 

Public Sub setup(value As Variant) 

If IsObject(value) Then 
    Set Me.value = value 
    valueIsObject = True 
Else 
    Me.value = value 
    valueIsObject = False 
End If 

End Sub 

この方法で、私はテストメソッドを書き換えることができます:今、私はReturnValueクラスを追加することによって、これを解決するためにしています

答えて

1

Sub assignVar() 

Dim v As Variant 
Dim rv as ReturnValue 

Set rv = getValue 

If rv.valueIsObject Then 
    Set v = rv.value 
Else 
    v = rv.value 
End If 

End Sub 

Function getValue() As ReturnValue 

Dim result As Boolean 
Dim dict as Dictionary 

result = PostSomethingToServer() 

set getValue=new ReturnValue 

If result Then 
    getValue.setup 1 
Else 
    Set dict = New Dictionary 
    dict.Add "a", 1 
    getValue.setup dict 
End If 

End Function 
関連する問題