2009-11-02 9 views

Répondre

59

Utilisation IsMissing:

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

Cependant, si je me souviens bien, cela ne fonctionne pas en donnant une valeur par défaut pour l'argument, et dans tous les cas, il rend l'utilisation de l'argument par défaut plutôt redondante.

+16

Aussi je pense que IsMissing ne fonctionne que si l'argument est déclaré comme une variante –

+3

@Jon: true, car 'IsMissing' est implémenté en termes d'indicateur dans la structure' VARIANT' (IIRC, 'VT_EMPTY'). Je n'ai pas mentionné cela puisque la question OP a déjà utilisé 'Variant' de toute façon. –

4

Si IsMissing (arg) Alors ...

9

Vous pouvez utiliser la fonction IsMissing(). Mais celui-ci ne fonctionne qu'avec le type de données Variant.

2

Si vous utilisez une chaîne ou une variable numérique, vous pouvez vérifier la valeur de la variable. Par exemple:

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 

Cela vous permet d'utiliser des variables non variables.

+0

Il ne peut cependant pas distinguer une utilisation parfaitement valide: 'func (" ", 0)' marquera de manière incorrecte les paramètres non définis. En général il n'y a * aucun moyen * d'avoir cette distinction sans utiliser 'Variant's. –

+0

@KonradRudolph C'est un très bon point. Vous voudrez vous assurer que vous ne l'avez jamais utilisé dans une situation où vous pourriez envoyer une chaîne vide ou un nombre de zéro. – OSUZorba

2

Vous pouvez utiliser quelque chose comme:

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

Avec une variante j'utiliser la fonction NZ:

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

Il peut être utilisé avec d'autres types de données trop, juste garder à l'esprit Zero compte comme ni Null ni Zero-Length, donc nz(0,"") renvoie toujours 0.