如何检查是否在VBA中指定了可选的字符串参数

时间:2016-04-08 12:33:46

标签: vba optional-parameters isnullorempty

我有一个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 nullparam_1 is emptyisNull(param_1),但没有任何方法可以按照我预期的方式进行。

那么检查是否指定了Parameter值的规范方法是什么?

4 个答案:

答案 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