如何测试是否可选参数提供或不?(How do I test if optional argument

2019-09-04 01:26发布

如何测试是否可选参数提供或不? - 在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 

Answer 1:

使用IsMissing

If IsMissing(arg) Then
    MsgBox "Parameter arg not passed"
End If

但是,如果我没有记错,这不会给的参数默认工作时,在任何情况下,它使得使用默认参数,而多余的。



Answer 2:

您可以使用ISMISSING()函数。 但是这一次只能在Variant中的数据类型。

Sub func(Optional s As Variant)
   If IsMissing(s) Then
      ' ...
   End If
End Sub


Answer 3:

如果您使用的是字符串或数字变量可以检查变量的值。 例如:

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

这使您可以使用非Variant变量。



Answer 4:

如果ISMISSING(ARG)则...



Answer 5:

您可以使用这样的:

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


Answer 6:

具有一个变体,我会用新西兰功能:

Function func (Optional ByRef arg As Variant = Nothing)
    If nz ( arg, 0 ) = 0 Then
        MsgBox "NOT SENT"
    End If
End Function 

它可以与其它数据类型中使用过,只是记住,零计数既不为null也不零长度,所以nz(0,"")仍返回0。



Answer 7:

“ISMISSING” ......想通有必须是一个方法。 谢谢大家!

SQL具有的功能,在(),在那里你可以传递多个参数,看是否目标值是在列表中。 我一直很喜欢,作为一个解决方案,所以这是我对这项,希望它有助于:

Public Function IsIn(ByVal TestVal, ByVal VersusVal1, _
            Optional ByVal VersusVal2, Optional ByVal VersusVal3, _
            Optional ByVal VersusVal4, Optional ByVal VersusVal5, _
            Optional ByVal VersusVal6, Optional ByVal VersusVal7, _
            Optional ByVal VersusVal8, Optional ByVal VersusVal9, _
            Optional ByVal VersusVal10, Optional ByVal VersusVal11, _
            Optional ByVal VersusVal12, Optional ByVal VersusVal13, _
            Optional ByVal VersusVal14, Optional ByVal VersusVal15, _
            Optional ByVal VersusVal16, Optional ByVal VersusVal17, _
            Optional ByVal VersusVal18, Optional ByVal VersusVal19, _
            Optional ByVal VersusVal20) As Boolean

Dim CheckVals(1 To 20) as Variant
VersusVals(1) = VersusVal1
VersusVals(2) = VersusVal2
VersusVals(3) = VersusVal3
VersusVals(4) = VersusVal4
VersusVals(5) = VersusVal5
VersusVals(6) = VersusVal6
VersusVals(7) = VersusVal7
VersusVals(8) = VersusVal8
VersusVals(9) = VersusVal9
VersusVals(10) = VersusVal10
VersusVals(11) = VersusVal11
VersusVals(12) = VersusVal12
VersusVals(13) = VersusVal13
VersusVals(14) = VersusVal14
VersusVals(15) = VersusVal15
VersusVals(16) = VersusVal16
VersusVals(17) = VersusVal17
VersusVals(18) = VersusVal18
VersusVals(19) = VersusVal19
VersusVals(20) = VersusVal20

On Error Goto 0

IsIn = False

For x = 1 To 20
   If Not IsMissing(VersusVals(x)) Then
      If TestVal = VersusVals(x) Then
         IsIn = True
         Exit For
      End If
   End If
Next x

End Function

所以,这就是为什么明明我需要“ISMISSING”; 没有它不工作。



Answer 8:

大多数的这些指该变体类型,或测试一个值是否空白。

然而,有时你想检查的范围,工作簿,工作表,或其他类型的对象不通过,而不检查之类的东西sheetnames。

在这种情况下:

DesiredRange is Nothing

返回一个布尔值。 例如:

    If DestinationRange Is Nothing Then
        MsgBox "Need a destination range when importing data"
    Else
        'We're happy
    End If


文章来源: How do I test if optional arguments are supplied or not?