Подтвердить что ты не робот

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

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

Ответ 1

Используйте IsMissing:

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

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

Ответ 2

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

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

Ответ 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

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

Ответ 4

Если IsMissing (arg) Затем...

Ответ 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

Ответ 6

В варианте я использовал бы функцию NZ:

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

Он также может использоваться с другими типами данных, просто имейте в виду, что Zero считается ни Null, ни Zero-Length, поэтому nz(0,"") все равно возвращает 0.

Ответ 7

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

Ответ 8

Большинство из них относятся к типу варианта или проверяют, является ли значение пустым.

Однако иногда вы хотите проверить, не передан ли диапазон, рабочая книга, лист или объект другого типа, без проверки таких вещей, как имена листов.

В таком случае:

DesiredRange is Nothing

Возвращает логическое значение. Например:

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