2009-11-02 11 views

risposta

59

Uso IsMissing:

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

Tuttavia, se non ricordo male, questo non funziona quando dà un valore predefinito per l'argomento e, in ogni caso, rende l'utilizzo dell'argomento predefinito piuttosto ridondante.

+16

Inoltre penso che IsMissing funzioni solo se l'argomento è dichiarato come variante –

+3

@Jon: true, poiché 'IsMissing' è implementato in termini di un flag nella struttura' VARIANT' (IIRC, 'VT_EMPTY'). Non ho menzionato questo dato che la domanda dell'OP usava già "Variant". –

4

Se IsMissing (arg) Allora ...

9

È possibile utilizzare la funzione IsMissing(). Ma questo funziona solo con il tipo di dati Variant.

2

Se si utilizza una variabile stringa o numero, è possibile controllare il valore della variabile. Ad esempio:

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 

Ciò consente di utilizzare variabili non varianti.

+0

Tuttavia, non è in grado di distinguere un utilizzo perfettamente valido: 'func (" ", 0)' contrassegna in modo errato i parametri non impostati. In generale non c'è * nessun modo * per avere questa distinzione senza usare 'Variant's. –

+0

@KonradRudolph Questo è un ottimo punto. Dovresti assicurarti di non averlo mai usato in una situazione in cui potresti inviare una stringa vuota o un numero pari a zero. – OSUZorba

2

Si può usare qualcosa di simile a:

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

Con una variante Vorrei utilizzare il funzione di NZ:

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

Può essere usato con altri tipi di dati troppo, basta tenere a mente che Zero conta come Null né Zero-Length, quindi nz(0,"") restituisce ancora 0.

Problemi correlati