VBAの関数がオブジェクトを返してくるか値を返してくるか分からん場合
VBAでは
・オブジェクトの代入は Set ステートメントで行う
・値の代入はLet ステートメントで行う(ただし「Let」は省略可)
となっているが、関数が状況によってオブジェクトを返したり値を返したりする場合
「実行してみるまで分からないのに、Setが要るかどうかはコードを書く時点で決めておかなくてはいけない」
という理不尽が発生するorz
(そもそもそんな行儀の悪い関数は窓から投げ捨てろという話もあるが
そうもいかない場合もあり……)
が、プロシージャの引数に関しては、そのあたりを気にする必要がないので
例えばこんな感じでラップしてやるとよい。
' 第一引数に関数の呼び出し式、第二引数に関数の戻り値を格納したい変数を渡す Sub WrappingResult(vResult As Variant, ByRef vBox As Variant) If IsObject(vResult) Then Set vBox = vResult Else vBox = vResult End If End Sub
てなアイデアをTeratailで教えていただきました。感謝。
teratail.com