如何检查 VBA 中是否指定了可选字符串参数
How do I check if an optional string parameter was specified in VBA
我有一个 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
的值(第二次和第三次调用就是这种情况)。
我已经尝试了 param_1 is null
、param_1 is empty
和 isNull(param_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
对此不是 100%,但是..
对于字符串做
If param_2 = "" Then ...
否则为对象使用
If param_2 is Nothing Then
数字
If param_2 = 0 Then ...
Public Function OptionalParam(Optional p As String)
Debug.Print p = ""
End Function
副本:VB - How do I test if optional arguments are supplied or not?
Jon 给出的答案(IsMissing() for Variants)是我在使用不需要默认值的可选参数时使用的答案。
更频繁地,我发现我更喜欢将我的可选参数默认为有用的东西。
我有一个 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
的值(第二次和第三次调用就是这种情况)。
我已经尝试了 param_1 is null
、param_1 is empty
和 isNull(param_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
对此不是 100%,但是.. 对于字符串做
If param_2 = "" Then ...
否则为对象使用
If param_2 is Nothing Then
数字
If param_2 = 0 Then ...
Public Function OptionalParam(Optional p As String)
Debug.Print p = ""
End Function
副本:VB - How do I test if optional arguments are supplied or not?
Jon 给出的答案(IsMissing() for Variants)是我在使用不需要默认值的可选参数时使用的答案。
更频繁地,我发现我更喜欢将我的可选参数默认为有用的东西。