vba - procedimientos - parametros opcionales c#
VB: ¿cómo pruebo si se proporcionan o no argumentos opcionales? (6)
¿Cómo pruebo si se proporcionan o no argumentos opcionales? - en 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
Con una variante usaría la función NZ :
Function func (Optional ByRef arg As Variant = Nothing)
If nz ( arg, 0 ) = 0 Then
MsgBox "NOT SENT"
End If
End Function
También se puede usar con otros tipos de datos, solo tenga en cuenta que Cero cuenta como nulo o de longitud cero, por lo que nz(0,"")
aún devuelve 0.
Puede usar la función IsMissing (). Pero este solo funciona con el tipo de datos Variant.
Puedes usar algo como:
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
Si IsMissing (arg) Entonces ...
Si está utilizando una cadena o una variable numérica, puede verificar el valor de la variable. Por ejemplo:
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
Esto le permite usar variables no variantes.
Use IsMissing
:
If IsMissing(arg) Then
MsgBox "Parameter arg not passed"
End If
Sin embargo, si recuerdo correctamente, esto no funciona cuando se da un valor predeterminado para el argumento, y en cualquier caso hace que usar el argumento predeterminado sea bastante redundante.