web-dev-qa-db-fra.com

Problème de zone de texte null

J'ai une zone de texte et un bouton sur mon formulaire d'accès. Dans l'événement click du bouton, je veux voir si la zone de texte est vide, si c'est le cas, rien ne sera exécuté .. donc je l'utilise 

If Me.textbox.Value = Null Then
    Exit Sub
End if

Mais cela ne fonctionne pas ... J'ai vérifié la valeur textbox.value dans la fenêtre d'exécution et la valeur est Null, mais la clause if ne fonctionne tout simplement pas ... Pourquoi? 

EDIT: @Dimse, j'ai essayé "", ne fonctionne pas. Et aussi textbox.text = Null, une erreur s’affiche pour me signaler que la zone de texte n’est pas active. Très étrange.

21
darkjh

Null n'est jamais égal à rien, pas même Null. Utilisez la fonction IsNull().

If IsNull(Me.textbox.Value) Then

Si vous voulez que Me.textbox soit traité de la même manière quand il contient une chaîne vide que lorsqu'il est Null, concaténez une chaîne vide avec elle et vérifiez la longueur de la chaîne combinée:

If Len(Me.textbox.Value & "") = 0 Then

Vous pouvez également utiliser la constante nommée, vbNullString, au lieu du littéral de chaîne, "", pour une chaîne vide. 

If Len(Me.textbox.Value & vbNullString) = 0 Then

L'utilisation du littéral chaîne nécessite que VBA construise cette chaîne à partir de zéro à chaque fois. Avec la constante nommée, VBA doit seulement la référencer, elle devrait donc être plus rapide et utiliser moins de mémoire. Cependant, dans de nombreux (probablement la plupart des) cas, l’avantage en performances avec vbNullString serait si mineur que vous ne remarqueriez pas la différence. Voir aussi le commentaire ci-dessous de David-W-Fenton .

Pour moi, la raison la plus convaincante d’utiliser vbNullString est qu’elle est immédiatement reconnaissable par mes yeux vieillissants. Inversement, avec le littéral chaîne, il me faut (un tout petit peu) plus de temps pour confirmer que "" n'est en réalité pas autre chose ... comme " " ou "'". Le seul inconvénient de vbNullString, IMO, est que cela nécessite plus de frappe que ""

Enfin, bien que vous n'ayez pas réellement besoin de référencer explicitement la propriété Value (puisqu'il s'agit de la propriété par défaut d'une zone de texte), je l'ai laissée car vous l'aviez ainsi et parce que je préfère être explicite avec Value :-)

51
HansUp

Je m'excuse également d'avoir réveillé les morts, mais je me demande si personne n'a envisagé d'utiliser la fonction Nz (voyez-la @MSDN ), très populaire dans VBA, également utilisable dans Access/SQL et à mon avis la solution plus pratique, concise et puissante pour les valeurs nullables dans les expressions.

3
rfb

Je m'excuse si je réveille les morts, mais par souci de complétude, je vais vous donner le code pour comment tester les espaces (visiblement «blanc/vide») :

If IsNull(Me.Textbox) Or Trim(Me.Textbox) = vbNullString Then
If Trim(Me.Textbox & vbNullString) = vbNullString Then 'Shorter version
If Len(Trim(Me.Textbox) & vbNullString) = 0 Then 'Shortest version

Je suis venu ici pour savoir comment gérer les espaces, les espaces vides/ZLS et NULL

2
gregg

Développez votre sous comme si:

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
    Exit Sub
End if
1
Mark Mooibroek

Null n'est pas égal à un autre Null;)

try If isNull (Me.textbox.Value) Alors

1
Scorpio

Je pense que vous devrez peut-être vérifier contre "", la chaîne vide et pas Null.

0
Dimse

Il suffit d’utiliser un deuxième critère, cela fonctionnera!
Dans ce cas, juste un mot simple comme "check". 

If Forms![Basic]![Table.Item] & "check" = "check" Then

MsgBox "Field Empty"

Else

MsgBox "Field Not Empty"

End If
0
Rambler

Je ne pouvais pas que cela fonctionne, car j'utilisais l'événement KeyUP. C'est donc ce qui a fonctionné pour moi.

If(Textbox.Text = '') 
  ...

Etant donné que Textbox.Value ne met à jour que l'événement de modification, il ne l'était pas à la mise à la clé, donc Textbox.Text est ce qui est actuellement dans la boîte.

Résumé: Sinon, utilisez la propriété .Text

0
twoLeftFeet