Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-如何测试是否提供可选字符串参数?_Excel_Optional Parameters_Vba - Fatal编程技术网

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
测试是否不适用于您的代码?@Ross
IsMissing
将返回
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