web-dev-qa-db-fra.com

VBA Vérifier si la variable est vide

J'ai un objet dans lequel je veux vérifier si certaines propriétés sont définies sur false, comme:

If (not objresult.EOF) Then
  'Some code 
End if

Mais quelque part, parfois objresult.EOF est Empty, et comment puis-je le vérifier?

  • La fonction IsEmpty concerne uniquement les cellules Excel
  • objresult.EOF Is Nothing _ retourne Empty
  • objresult.EOF <> null _ retourne Empty également!
43
fessguid

La façon dont vous testez dépend du DataType de la propriété:

 | Type | Test | Test2 
 | Numeric (Long, Integer, Double etc.) | Si obj.Property = 0 alors | 
 | Boolen (Vrai/Faux) | Si pas obj.Property Then | Si obj.Property = False Alors 
 | Objet | Si l'obj. La propriété n'est rien alors | 
 | String | If obj.Property = "" Alors | Si LenB (obj.Property) = 0 Alors 
 | Variante | Si obj.Property = Vide, alors | 

Vous pouvez indiquer le type de données en appuyant sur F2 pour lancer le navigateur d'objets et en recherchant l'objet. Une autre solution consisterait simplement à utiliser la fonction TypeName: MsgBox TypeName(obj.Property)

82
Oorang

Pour vérifier si Variant est Null, vous devez le faire comme suit:

Isnull(myvar) = True

ou

Not Isnull(myvar)
18
Valentin Despa

Pour un nombre, c'est délicat, car si une cellule numérique est empty VBA lui attribue une valeur par défaut de 0, il est donc difficile pour votre code VBA de faire la différence entre un zéro entré et un blanc vide. cellule.

La vérification suivante a fonctionné pour moi pour voir si un 0 réel avait été entré dans la cellule:

If CStr(rng.value) = "0" then
    'your code here'
End If
11
deasa

J'ai eu un problème similaire avec un entier qui pourrait légitimement être assigné 0 dans Access VBA. Aucune des solutions ci-dessus n'a fonctionné pour moi.

Au début, je viens d'utiliser une instruction booléenne var et IF:

Dim i as integer, bol as boolean
   If bol = false then
      i = ValueIWantToAssign
      bol = True
   End If

Dans mon cas, mon affectation de variable entière se trouvait dans une boucle for et dans une autre instruction IF. J'ai donc fini par utiliser "Exit For" à la place, car elle était plus concise.

comme si:

Dim i as integer
ForLoopStart
   If ConditionIsMet Then
      i = ValueIWantToAssign
   Exit For
   End If
ForLoopEnd
0
Galanor