如何检查 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 nullparam_1 is emptyisNull(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)是我在使用不需要默认值的可选参数时使用的答案。

更频繁地,我发现我更喜欢将我的可选参数默认为有用的东西。