我有一个VBA Sub
,其签名如下:
private sub xyz ( _
optional param_1 as string, _
optional param_2 as string _
)
xyz
可能被称为
call xyz("apple")
或
call xyz("banana", "")
或
call xyz("strawberry", "blue")
我希望函数能够确定调用者是否明确指定了param_2
的值(在第2次和第3次调用中就是这种情况)。
我尝试过param_1 is null
,param_1 is empty
和isNull(param_1)
,但没有任何方法可以按照我预期的方式进行。
那么检查是否指定了Parameter值的规范方法是什么?
答案 0 :(得分:4)
重复:VB - How do I test if optional arguments are supplied or not?
Jon给出的答案(Variants的IsMissing())是我在使用不需要默认值的Optional参数时使用的。
更频繁地,我发现我更喜欢将可选参数默认为有用的东西。
答案 1 :(得分:1)
最后的可能性是指定一个荒谬的默认值。然后与默认值进行比较。
Private Sub xyz( _
Optional param_1 As String = "mydefault_impossible_value", _
Optional param_2 As String = "mydefault_impossible_value")
If param_1 = "mydefault_impossible_value" Then
MsgBox "novalue_for_param_1"
End If
If param_2 = "mydefault_impossible_value" Then
MsgBox "novalue_for_param_2"
End If
End Sub
答案 2 :(得分:0)
不是100%,但.. 对于字符串执行
If param_2 = "" Then ...
否则使用对象
If param_2 is Nothing Then
编号
If param_2 = 0 Then ...
答案 3 :(得分:0)
Public Function OptionalParam(Optional p As String)
Debug.Print p = ""
End Function