VB – Comment tester si des arguments optionnels sont fournis ou non?

Comment tester si des arguments optionnels sont fournis ou non? – 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 

Utilisez IsMissing :

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

Cependant, si je me souviens bien, cela ne fonctionne pas lorsque vous atsortingbuez une valeur par défaut à l’argument et, en tout cas, cela rend l’utilisation de l’argument par défaut plutôt redondant.

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

Si IsMissing (arg) Alors …

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

 Function func (Optional Str as Ssortingng, 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 variant.

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 

Avec une variante, j’utiliserais 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 aussi être utilisé avec d’autres types de données, gardez à l’esprit que Zero ne compte ni Null ni Zero-Length, donc nz(0,"") renvoie toujours 0.

“IsMissing” … Figuré il devrait y avoir un moyen. Merci a tous!

SQL a une fonction, In (), où vous pouvez transmettre plusieurs arguments pour voir si la valeur cible est dans la liste. J’ai toujours aimé ça comme solution, alors voici ma réponse, j’espère que ça vous aidera:

 Public Function IsIn(ByVal TestVal, ByVal VersusVal1, _ Optional ByVal VersusVal2, Optional ByVal VersusVal3, _ Optional ByVal VersusVal4, Optional ByVal VersusVal5, _ Optional ByVal VersusVal6, Optional ByVal VersusVal7, _ Optional ByVal VersusVal8, Optional ByVal VersusVal9, _ Optional ByVal VersusVal10, Optional ByVal VersusVal11, _ Optional ByVal VersusVal12, Optional ByVal VersusVal13, _ Optional ByVal VersusVal14, Optional ByVal VersusVal15, _ Optional ByVal VersusVal16, Optional ByVal VersusVal17, _ Optional ByVal VersusVal18, Optional ByVal VersusVal19, _ Optional ByVal VersusVal20) As Boolean Dim CheckVals(1 To 20) as Variant VersusVals(1) = VersusVal1 VersusVals(2) = VersusVal2 VersusVals(3) = VersusVal3 VersusVals(4) = VersusVal4 VersusVals(5) = VersusVal5 VersusVals(6) = VersusVal6 VersusVals(7) = VersusVal7 VersusVals(8) = VersusVal8 VersusVals(9) = VersusVal9 VersusVals(10) = VersusVal10 VersusVals(11) = VersusVal11 VersusVals(12) = VersusVal12 VersusVals(13) = VersusVal13 VersusVals(14) = VersusVal14 VersusVals(15) = VersusVal15 VersusVals(16) = VersusVal16 VersusVals(17) = VersusVal17 VersusVals(18) = VersusVal18 VersusVals(19) = VersusVal19 VersusVals(20) = VersusVal20 On Error Goto 0 IsIn = False For x = 1 To 20 If Not IsMissing(VersusVals(x)) Then If TestVal = VersusVals(x) Then IsIn = True Exit For End If End If Next x End Function 

Donc, c’est évidemment pour ça que j’avais besoin de “IsMissing”; ne fonctionne pas sans elle