Ich habe ein Textfeld und eine Schaltfläche in meinem Access-Formular. Im Klickereignis der Schaltfläche möchte ich sehen, ob das Textfeld leer ist. Wenn dies der Fall ist, wird nichts ausgeführt. So benutze ich
If Me.textbox.Value = Null Then
Exit Sub
End if
Aber es funktioniert nicht ... Ich habe das Textfeld.Wert im Ausführungsfenster überprüft und es ist Null, aber die If-Klausel funktioniert nicht ... Warum?
EDIT: @Dimse, ich habe "" versucht, funktioniert nicht. Und auch textbox.text = Null, es erscheint eine Fehlermeldung, dass das Textfeld nicht aktiv ist. Sehr seltsam.
Null ist niemals irgendetwas gleich, nicht einmal Null. Verwenden Sie die Funktion IsNull()
.
If IsNull(Me.textbox.Value) Then
Wenn Sie möchten, dass Me.textbox
dasselbe behandelt wird, wenn es eine leere Zeichenfolge enthält, als wenn es null ist, verketten Sie eine leere Zeichenfolge und überprüfen Sie die Länge der kombinierten Zeichenfolge:
If Len(Me.textbox.Value & "") = 0 Then
Sie können auch die benannte Konstante vbNullString
anstelle des Zeichenfolgenliteral ""
für eine leere Zeichenfolge verwenden.
If Len(Me.textbox.Value & vbNullString) = 0 Then
Die Verwendung des Zeichenfolgenliteral erfordert, dass VBA diese Zeichenfolge jedes Mal von Grund auf neu erstellt. Bei der benannten Konstante muss VBA nur darauf verweisen, also sollte es schneller sein und weniger Speicher verwenden. In vielen (wahrscheinlich den meisten) Fällen wäre der Leistungsvorteil mit vbNullString
jedoch so gering, dass Sie den Unterschied nicht bemerken würden. Siehe auch den Kommentar unten from David-W-Fenton .
Für mich ist der überzeugendere Grund, vbNullString
zu verwenden, dass es für meine alternden Augen sofort erkennbar ist. Umgekehrt, mit dem String-Literal dauert es (ein kleines bisschen länger), um zu bestätigen, dass ""
nicht wirklich etwas anderes ist ... wie " "
oder "'"
. Der einzige Nachteil von vbNullString
, IMO, besteht darin, dass mehr Eingaben erforderlich sind als ""
.
Auch wenn Sie nicht unbedingt explizit auf die Value
-Eigenschaft verweisen müssen (da dies die Standardeigenschaft eines Textfelds ist), habe ich es gelassen, weil Sie es so hatten und weil ich es vorziehen würde, auch explizit mit Value
zu sein. :-)
Ich entschuldige mich auch dafür, dass ich die Toten geweckt habe, aber ich frage mich, dass niemand die Verwendung von Nz
Function (siehe @MSDN ) betrachtet hat, die in VBA sehr beliebt ist und auch in Access/SQL und meiner Meinung nach verwendet werden kann die bequemere, prägnantere und leistungsfähigere Lösung für nullwertfähige Werte in Ausdrücken.
Ich entschuldige mich, wenn ich die Toten wecke, aber der Vollständigkeit halber gebe ich den Code für wie man Leerzeichen (sichtbar 'leer/leer') testet
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
Ich bin hergekommen, um nach Leerzeichen zu suchen, leer/ZLS und NULL's.
Erweitern Sie Ihr Sub wie folgt:
If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
Exit Sub
End if
Null ist nicht gleich einem anderen Null;)
try Wenn isNull (Me.textbox.Value) Dann
Ich denke, Sie müssen möglicherweise gegen "", den leeren String und nicht gegen Null überprüfen.
Verwenden Sie einfach ein zweites Kriterium, das funktioniert !!
In diesem Fall nur ein einfaches Wort wie "check".
If Forms![Basic]![Table.Item] & "check" = "check" Then
MsgBox "Field Empty"
Else
MsgBox "Field Not Empty"
End If
Ich konnte das nicht zum Laufen bringen, da ich das KeyUP-Event verwendete. Stattdessen hat dies für mich funktioniert.
If(Textbox.Text = '')
...
Da Textbox.Value nur bei einem Änderungsereignis aktualisiert wird, wurde es beim Keyup nicht aktualisiert. Textbox.Text ist das, was sich derzeit in der Box befindet.
Zusammenfassung: Verwenden Sie alternativ die .Text-Eigenschaft