我正在尝试使用用户输入编写一个 VBA 宏来自动过滤表。我需要用户指明要过滤的列以及该字段的条件。因此我想定义一个带有多个可选参数(参数)的 Sub 来获取用户的偏好。我的问题是如何检查是否提供了可选参数?
我知道我可以为每个参数编写一个测试,然后为每个可能的选项编写一个条件语句。但这似乎不是一个聪明的方法,我想知道是否有人可以提出解决方案。我应该说,一开始我们不知道我们期望从用户那里收到多少参数。
感谢您的回复。
我正在尝试使用用户输入编写一个 VBA 宏来自动过滤表。我需要用户指明要过滤的列以及该字段的条件。因此我想定义一个带有多个可选参数(参数)的 Sub 来获取用户的偏好。我的问题是如何检查是否提供了可选参数?
我知道我可以为每个参数编写一个测试,然后为每个可能的选项编写一个条件语句。但这似乎不是一个聪明的方法,我想知道是否有人可以提出解决方案。我应该说,一开始我们不知道我们期望从用户那里收到多少参数。
感谢您的回复。
如果变量的类型是variant
一个解决方案,将使用IsMissing
:
If IsMissing(arg) Then
MsgBox "missing parameter"
End If
然后,如果您期望string
or number
,只需检查值:
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
一种可能性是指定一个荒谬的默认值。然后与默认值进行比较。
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