wake-up-neo.com

Textfeld null Problem

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.

21
darkjh

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. :-)

51
HansUp

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.

3
rfb

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.

2
gregg

Erweitern Sie Ihr Sub wie folgt:

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

Null ist nicht gleich einem anderen Null;)

try Wenn isNull (Me.textbox.Value) Dann

1
Scorpio

Ich denke, Sie müssen möglicherweise gegen "", den leeren String und nicht gegen Null überprüfen.

0
Dimse

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
0
Rambler

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

0
twoLeftFeet