有没有办法确定在VBA函数调用中给出了哪些可选参数?

时间:2011-10-03 16:49:30

标签: function vba introspection optional-parameters

假设我有一个带可选参数的VBA函数。有没有办法在该函数中告诉调用代码是否提供了可选参数?

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

End Function

即。有没有办法区分以下几个电话?

x = SomeFunction()
x = SomeFunction(0)

2 个答案:

答案 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数据类型,因为任何其他数据类型将始终具有默认初始化值。

答案 1 :(得分:0)

不,没有。

同样的问题存在于其他语言中,例如C#,如“C#In Depth”中第13.1.1章清楚表达的那样(我在15分钟前阅读此部分,这是正常的,我记得这个!)

我建议您不要在函数声明中设置默认值。在函数中,如果参数为null,则将其设置为0,并且您知道函数调用中未提供它。

编辑:就像@Remnant在他的回答中所说,为了能够做到这一点,参数类型需要是一个变体。