如何测试是否提供可选参数? - 在VB6/VBAVB - 如何测试是否提供可选参数?
Function func (Optional ByRef arg As Variant = Nothing)
If arg Is Nothing Then <----- run-time error 424 "object required"
MsgBox "NOT SENT"
End If
End Function
如何测试是否提供可选参数? - 在VB6/VBAVB - 如何测试是否提供可选参数?
Function func (Optional ByRef arg As Variant = Nothing)
If arg Is Nothing Then <----- run-time error 424 "object required"
MsgBox "NOT SENT"
End If
End Function
使用IsMissing
:
If IsMissing(arg) Then
MsgBox "Parameter arg not passed"
End If
但是,如果我没有记错,这并没有给工作时这是参数的默认值,在任何情况下它都会使用默认参数而非冗余。
如果ISMISSING(ARG)则...
您可以使用IsMissing()函数。但是这个只适用于Variant数据类型。
如果您使用字符串或数字变量,您可以检查变量的值。例如:
Function func (Optional Str as String, Optional Num as Integer)
If Str = "" Then
MsgBox "NOT SENT"
End If
If Num = 0 Then
MsgBox "NOT SENT"
End If
End Function
这允许您使用非变量变量。
虽然它不能区分完全有效的用法:'func(“”,0)'会错误地标记未设置的参数。一般来说,没有办法可以在不使用“变体”的情况下进行区分。 – 2016-08-23 10:21:19
@KonradRudolph这是一个很好的观点。在某种情况下,你可能想要确保你没有使用它,你可能会发送一个空字符串或零个数字。 – OSUZorba 2016-08-29 05:21:18
您可以使用类似:
function func(optional vNum as integer:=&HFFFF) '&HFFFF value that is NEVER set on vNum
If vNum = &HFFFF Then
MsgBox "NOT SENT"
End If
End Function
具有一个变体我会用NZ功能:
Function func (Optional ByRef arg As Variant = Nothing)
If nz (arg, 0) = 0 Then
MsgBox "NOT SENT"
End If
End Function
,可以与其他数据类型一起使用过,只要记住即零计数为空或零长度,所以nz(0,"")
仍然返回0.
另外,我认为IsMissing只适用于参数被声明为变体 – 2009-11-03 15:24:44
@Jon:true,因为'IsMissing'是通过'VARIANT'结构体(IIRC,'VT_EMPTY')中的一个标志来实现的。我没有提到这个,因为OP的问题已经使用了'Variant'。 – 2009-11-03 17:38:12