2012-12-13 10 views
6

So habe ich ein frustrierend einfaches Problem, das ich nicht zu lösen scheinen kann.Vergleichen von object.Value = Null erzeugt keine erwarteten Ergebnisse

Grundsätzlich habe ich eine ungebundene Box, in die der Benutzer Daten eingibt und dann eine Taste drückt. Nach einem Ja-Bestätigungsfeld werden die Daten in der ungebundenen Box in die gebundene Box kopiert. Wenn der Benutzer jedoch nichts eingibt, erzeugt das wiederum ein leeres gebundenes Feld, das die Abfragen auf der Straße ernsthaft beeinträchtigen kann.

Das gesagt, der obige Code wird einfach nicht für mich arbeiten. Wenn ich zum Beispiel If Me.Bank_Credit.Value = 1 setze und dann starte, werden die 1s in 2s umgewandelt, was passieren sollte. Aber es weigert sich einfach, für Null oder gar "" zu arbeiten.

Ich bin mir so sicher, dass es eine einfache Lösung für dieses Problem gibt, ich kann es einfach nicht herausfinden.

Vielen Dank im Voraus

Antwort

16

Nichts ist jemals gleich Null ist, nicht einmal ein anderes Null. Und nichts ist Null nie gleich, nicht einmal eine Null.

Wenn Bank_Creditist Null, der folgende Ausdruck NULL zurück ... nicht True wie man erwarten könnte, oder sogar False.

Debug.Print (Me.Bank_Credit.Value = Null) 

Es ist der gleiche Grund für dieses Ergebnis in dem Direkt-Fenster:

Debug.Print Null = Null 
Null 

Verwenden Sie die IsNull() Funktion.

If IsNull(Me.Bank_Credit.Value) Then 

Auch sehen Sie das Nz() Hilfethema, um zu sehen, ob es sinnvoll sein kann. Sie könnten dies tun, obwohl es nicht wirklich eine Verbesserung gegenüber IsNull() ist. Aber Nz() kann für anderen VBA-Code sehr bequem sein.

Me.Bank_Credit = Nz(Me.Bank_Credit, 0) 
+4

Bei Nullen kann '=' nicht als Vergleicher verwendet werden (wenn x = Null dann), kann aber immer noch als Zuweisungsbefehl verwendet werden (x = Null). –

+0

Aha, das hat funktioniert! Sehr geschätzt. – user1706975

4

HansUp Antwort ist richtig, aber ich dachte, es relevant hinzufügen, dass es für „Nichts“ ein ähnliches Konstrukt ist, das im Grunde ein VBA Schlüsselwort für ein dereferenzierte Objekt ist. Sie haben Aussagen zu verwenden, wie

If myRange is Nothing Then 

Sie diese Art von Aussagen alle über die VBA-Hilfedateien (und tatsächlich in anderen Sprachen, die ein Schlüsselwort ähnlich wie diese haben) sehen.

Verwandte Themen