如何测试是否提供了可选参数?

Rob*_*cks 68 vb6 vba arguments function optional-arguments

如何测试是否提供了可选参数? - 在VB6/VBA中

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 
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 83

用途IsMissing:

If IsMissing(arg) Then
    MsgBox "Parameter arg not passed"
End If
Run Code Online (Sandbox Code Playgroud)

但是,如果我没记错的话,在为参数提供默认值时这不起作用,并且在任何情况下它都使用默认参数而非冗余.

  • 此外,我认为IsMissing仅在参数声明为变体时才有效 (27认同)
  • @Jon:是的,因为`IsMissing`是根据`VARIANT`结构(IIRC,`VT_EMPTY`)中的标志实现的.我没有提到这个,因为OP的问题已经使用过`Variant`了. (5认同)

Flo*_*ser 19

您可以使用IsMissing()函数.但是这个只适用于Variant数据类型.

Sub func(Optional s As Variant)
   If IsMissing(s) Then
      ' ...
   End If
End Sub
Run Code Online (Sandbox Code Playgroud)


OSU*_*rba 10

如果使用字符串或数字变量,则可以检查变量的值.例如:

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
Run Code Online (Sandbox Code Playgroud)

这允许您使用非变量变量.

  • 但是,它不能区分完全有效的用法:`func(“”,0)`将错误地标记未设置的参数。通常,如果不使用`Variant`,*不可能*有这种区别。 (2认同)

小智 7

你可以使用类似的东西:

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
Run Code Online (Sandbox Code Playgroud)