2

我有一个 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 emptyisNull(param_1),但没有任何效果符合我的预期。

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

4

4 回答 4

4

重复:VB - 如何测试是否提供了可选参数?

Jon 给出的答案(IsMissing() for Variants)是我在使用不需要默认值的可选参数时使用的答案。

更常见的是,我发现我更喜欢将可选参数默认为有用的东西。

于 2016-04-08T12:51:03.967 回答
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
于 2016-04-08T12:43:42.460 回答
0

不是100%,但是..对于字符串

If param_2 = "" Then ...

否则为对象使用

If param_2 is Nothing Then

数字

If param_2 = 0 Then ...
于 2016-04-08T12:44:59.610 回答
0
Public Function OptionalParam(Optional p As String)
    Debug.Print p = ""
End Function
于 2016-04-08T12:46:24.810 回答