Excel VBA-如何测试是否提供可选字符串参数?
这是一个后续问题: 如果我的输入类型是字符串(不是变体),有没有办法检查它是否丢失?到目前为止,我发现最好的方法是输入一个不太可能的默认输入Excel VBA-如何测试是否提供可选字符串参数?,excel,optional-parameters,vba,Excel,Optional Parameters,Vba,这是一个后续问题: 如果我的输入类型是字符串(不是变体),有没有办法检查它是否丢失?到目前为止,我发现最好的方法是输入一个不太可能的默认输入 Function func (Optional arg As String = "VeryUnlikelyInput") If arg = "VeryUnlikelyInput" Then MsgBox "NOT SENT" End If End Function 如果这是用户输入的文本,请使用无法在键盘上键入的字符
Function func (Optional arg As String = "VeryUnlikelyInput")
If arg = "VeryUnlikelyInput" Then
MsgBox "NOT SENT"
End If
End Function
如果这是用户输入的文本,请使用无法在键盘上键入的字符,如“·Þ”
根本不提供默认值。然后,缺少的参数将成为空指针:
Function IfDefault(Optional s As String) As Boolean
IfDefault = (StrPtr(s) = 0)
End Function
? IfDefault()
> True
? IfDefault("aaaa")
> False
? IfDefault("")
> False
请注意,您仍然可以通过在窗体上传递空文本框的
vbNullString
,TextBox.Value
,或者如果对话框被取消,则传递InputBox()
,来愚弄它Application.InputBox()
当然没有这个问题,因为取消时它返回False
。这是一个非常有趣的解决方案!(虽然不是100%完美,但很有趣!)我尝试过摆弄“出错后继续下一步”和“出错后转到0”,但我无法找到解决方案。我看不出与您链接的问题有什么区别。IsMissing
测试是否不适用于您的代码?@RossIsMissing
将返回False
,因为可选参数在未输入时的值为”
。我明白了,我建议使用一个不可能作为默认值传递的值,比如不能在键盘上键入的字符串。更好的是,vbNullChar
注意:InputBox
将在点击“取消”时传递空指针。这在IDE中工作。如果将=IfDefault()
放在Excel工作表的单元格中(OP用Excel vba
明确标记问题),在这种情况下,当Excel向函数传递空字符串时,它将返回False
。要使其正常工作,您必须提供默认值=vbNullString
(至少在Excel 365中)
Function IfDefault(Optional s As String) As Boolean
IfDefault = (StrPtr(s) = 0)
End Function
? IfDefault()
> True
? IfDefault("aaaa")
> False
? IfDefault("")
> False