假设我有一个带可选参数的VBA函数。有没有办法在该函数中告诉调用代码是否提供了可选参数?
Public Function SomeFunction(optional argument as Integer = 0) As Integer
End Function
即。有没有办法区分以下几个电话?
x = SomeFunction()
x = SomeFunction(0)
答案 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在他的回答中所说,为了能够做到这一点,参数类型需要是一个变体。