Как проверить, предоставляются ли дополнительные аргументы или нет?



Как проверить, если дополнительные аргументы предоставляются или нет? -- в 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
428   7  

7 ответов:

использовать IsMissing:

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

однако, если я правильно помню, это не работает при предоставлении значения по умолчанию для аргумента, и в любом случае это делает использование аргумента по умолчанию довольно избыточным.

вы можете использовать функцию IsMissing (). Но это работает только с типом данных Variant.

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

Если вы используете строковую или числовую переменную, вы можете проверить значение переменной. Например:

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

Это позволяет использовать непараметрические переменные.

Если IsMissing (arg) то ...

вы можете использовать что-то вроде:

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"...Решил, что должен быть способ. Спасибо всем!

SQL имеет функцию, In(), где вы можете передать несколько аргументов, чтобы увидеть, если целевое значение находится в списке. Мне всегда нравилось это как решение, так что вот мой взгляд на это, надеюсь, что это поможет:

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"; не работает без него.

    Ничего не найдено.

Добавить ответ:
Отменить.