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.
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
:-)
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.
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
Développez votre sous comme si:
If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
Exit Sub
End if
Null n'est pas égal à un autre Null;)
try If isNull (Me.textbox.Value) Alors
Je pense que vous devrez peut-être vérifier contre "", la chaîne vide et pas Null.
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
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