Как проверить, поставляются ли дополнительные аргументы или нет? - в 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
Используйте IsMissing
:
If IsMissing(arg) Then
MsgBox "Parameter arg not passed"
End If
Однако, если я правильно помню, это не работает при предоставлении значения по умолчанию для аргумента, и в любом случае он делает использование аргумента по умолчанию довольно избыточным.
Вы можете использовать функцию IsMissing(). Но этот только работает с типом данных Variant.
Если вы используете строку или числовую переменную, вы можете проверить значение переменной. Например:
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
Это позволяет использовать невариантные переменные.
func("", 0)
будет неправильно отмечать неустановленные параметры. В общем случае нет возможности получить это различие без использования Variant
s.
Если 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
Он также может использоваться с другими типами данных, просто имейте в виду, что Zero считается ни Null, ни Zero-Length, поэтому nz(0,"")
все равно возвращает 0.
IsMissing
реализован в виде флага в структуреVARIANT
(IIRC,VT_EMPTY
). Я не упомянул об этом, так как вопрос OP уже использовалVariant
любом случае.