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

51

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

6 ответов

61
Лучший ответ

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

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

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

  • 20
    Также я думаю, что IsMissing работает, только если аргумент объявлен как вариант
  • 4
    @Jon: true, поскольку IsMissing реализован в виде флага в структуре VARIANT (IIRC, VT_EMPTY ). Я не упомянул об этом, так как вопрос OP уже использовал Variant любом случае.
14

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

4

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

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

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

  • 1
    Хотя он не может различить абсолютно правильное использование: func("", 0) будет неправильно отмечать неустановленные параметры. В общем случае нет возможности получить это различие без использования Variant s.
  • 0
    @KonradRudolph Это очень хороший момент. Вы хотели бы убедиться, что никогда не использовали его в ситуации, когда могли бы послать пустую строку или нулевое число.
4

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

3

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

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
1

В варианте я использовал бы функцию 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню