如何测试是否提供了excel-VBA过程的某些可选参数?

时间:2013-06-17 22:49:01

标签: vba excel-vba optional-parameters autofilter excel

我正在尝试使用用户输入将VBA宏写入AutoFilter表。我需要用户指明要过滤的列以及该字段的标准。因此我想用一个带有多个可选参数(参数)的Sub来定义用户首选项。我的问题是如何检查是否提供了可选参数?

我知道我可以为每个参数编写一个测试,然后为每个可能的选项编写一个条件语句。但这似乎并不是一种聪明的方式,我想知道是否有人能提出解决方案。我应该说,一开始我们不知道我们期望从用户那里获得的论点数量是多少。

感谢您的回复。

2 个答案:

答案 0 :(得分:3)

如果变量的类型为variant,则解决方案是使用IsMissing

 If IsMissing(arg) Then
     MsgBox "missing parameter"
 End If

然后,如果您希望stringnumber,请检查以下值:

 Function func (Optional s as String, Optional n as Integer)

 If s = "" Then
     MsgBox "s is missing"
 End If

 If n = 0 Then
     MsgBox "n is missing"
 End

答案 1 :(得分:0)

可能是指定荒谬的默认值。然后与默认值进行比较。

Sub xyz( Optional p1 As String = "default_impossible_value")
    If p1 = "default_impossible_value" Then
       MsgBox "there_is_no_value_for_param_1"
    End If
End Sub

然后将其扩展为您希望作为条目的任意数量的参数:

Sub xyz( Optional p1 As String = "default_impossible_value"_
        ,Optional p2 As String = "default_impossible_value"_
        ,Optional p3 As String = "default_impossible_value"_
...
)
    If p1 = "default_impossible_value" Then
       MsgBox "there_is_no_value_for_param_1"
    End If
    If p2 = "default_impossible_value" Then
       MsgBox "there_is_no_value_for_param_2"
    End If
    If p3 = "default_impossible_value" Then
       MsgBox "there_is_no_value_for_param_3"
    End If
....
End Sub