开发者

Is there a way to determine which optional arguments were given in a VBA function call?

Say I have a VBA 开发者_开发知识库function with an optional argument. Is there a way to tell, from within that function, whether the calling code has supplied the optional argument or not?

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

End Function

i.e. Is there a way to tell the difference between the following calls?

x = SomeFunction()
x = SomeFunction(0)


As far as I am aware it is not possible. If no argument is passed then the argument is initiliazed to its default value (0 in this case).

One way around this is to change the variable type to Variant and use the IsMissing function to check whether an argument is passed or not. Example:

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

The IsMissing function works only with the Variant data type as any other data type will always have a default initialization value.


No, there is not.

The same problem exists in other language, such as C#, as expressed clearly in "C# In Depth", Chapter 13.1.1 (I read this part 15mins ago, it's normal I remember this!)

What I suggest you is not to set the default value in the function declaration. In the function, if argument is null, you set it to 0 and you know it wasn't supplied in the function call.

Edit : Just like @Remnant said in his answer, to be able to do this, the parameter type needs to be a variant.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜