2011-10-03 5 views
1

私はオプションの引数を持つVBA関数があります。呼び出し元コードがオプションの引数を提供しているかどうかを、その関数内から通知する方法はありますか?VBA関数呼び出しでどのオプション引数が指定されたかを判断する方法はありますか?

Public Function SomeFunction(optional argument as Integer = 0) As Integer 

End Function 

つまり、次の呼び出しの違いを伝える方法はありますか?

x = SomeFunction() 
x = SomeFunction(0) 

答えて

4

私が知る限り、これは不可能です。引数が渡されない場合、引数はデフォルト値(この場合は0)に初期化されます。

変数の型をVariantに変更し、IsMissing関数を使用して引数が渡されているかどうかを確認します。例:他のデータ型は、常にデフォルトの初期値を持つことになりますよう

Public Function SomeFunction(Optional argument As Variant) As Integer 
    If IsMissing(argument) Then 
     argument = 0 
    Else 
     // Code if argument not = 0.... 
    End If 
End Function 

IsMissing関数はVariantデータ型でのみ動作します。

0

いいえ、ありません。 「深さCの#」、章13.1.1で明確に表現されるよう

同じ問題は、C#など、他の言語に存在する(私は15分前にこの部分を読んで、それは!私はこれを覚えて、通常だ)

何私はあなたが関数宣言でデフォルト値を設定しないことをお勧めします。この関数では、引数がnullの場合は0に設定し、関数呼び出しで引数が指定されていないことがわかります。

編集:ちょうど@レムナントが答えで言ったように、これを行うためには、パラメータタイプがバリアントである必要があります。

関連する問題