Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Wahr und Falsch

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --
Wahrheiten und Falschheiten in VBA

Sollten Sie das kleine Quiz dazu noch nicht gemacht haben, empfehle ich Ihnen, dies zuerst zu tun:
Zuerst zum Quiz

Ob eine Bedinung wahr ist ob eine Rückgabe als Wahr interpretiert wird oder ob ich sie gegen Wahr vergleiche, sind völlig verschiedene Dinge.

Fangen wir mit etwas Einfachen an:

If 4>3 then MsgBox "Hallo"

Hier haben wir einen Vergleich, den VBA auswerten kann und entscheiden kann ob dies Wahr oder Falsch ist. Tatsächlich liefert VBA hier sogar einen Wert zurück, nämlich 0 wenn es falsch ist und -1 wenn es wahr ist.

Wir ändern die Abfrage ein wenig in:
If (4 > 3) = -1 Then MsgBox "Hallo"

Auch jetzt wird die MsgBox angezeigt. Wenn Sie anstatt der - 1 irgendeine andere Zahl hinschreiben, wird die Msgbox nicht angezeigt.
Beachten Sie aber!!! Der Vergleich ist jetzt nicht mehr 4>3 sondern 4>3=-1 !!!!

Wenn Sie nun die - 1 durch das Wort True ersetzen, passiert auch das Gleiche.

Die Konstanten True und False


Benutze ich in meinem Code irgendwo die Konstanten True oder False so ist dies nichts anderes als würde ich:

-1 schreiben bei True
0 schreiben bei False


VBA liefert bei einem Vergleich immer einen Wert zurück, der entweder 0 (wenn der Vergleich Falsch ergibt) oder -1 (Wenn der Vergleich Wahr ergibt)

4 > 3 ist ein Vergleich und liefert mir -1 zurück. Dies kann ich wunderbar gegen -1 wieder vergleichen.
Ich muss aber Vergleiche nicht gegen True (-1) vergleichen, da dies der Standardvorgang von VBA ist.


Was passiert aber wenn ich gar keine Vergleiche habe?

If 4 + 3 then MsgBox "Hallo"

Letztendlich steht dort nichts anderes als:
If 7 then ...

Dies ist nun wahrlich kein Vergleich. Aber trotzdem muss/kann VBA dies auswerten.

Es gibt nur Wahr oder Falsch und nichts dazwischen. Also ist faktisch festgelegt:

Alles was nicht falsch ist, ist wahr.

Wir haben oben gelernt, dass ein Vergleich entweder 0 oder - 1 zurückgibt.
Hier erhält VBA den Rückgabewert 7 und sagt sich in seiner netten Art:
7 ist nicht gleich 0, also da nur 0 Falsch wäre, muss es Wahr sein. So einfach.

Rückgabewerte von Funktionen nutzen dies:

Viele Funktionen, z.B. auch API Funktionen nutzen dieses Feature.

Die 1.Variante: Sie geben eine Information zurück die sich z.B. auf eine Anzahl bezieht (kopierte Dateien von mir aus). Jetzt weiß ich, wenn mir die Funktion die Zahl 0 zurückgibt, hat es nicht funktioniert und kann als Falsch oder Wahr abgeprüft werden, z.B.

If IrgenEineFunktion then
'Wahrteil - immer wenn mir die Funktion eine andere Zahl als 0 zurückgibt.
Else
'Falschteil
End if

2. Variante (pervertiert und häufiger im Einsatz, m.E.)

Sie geben z.B. eine 0 zurück wenn alles in Ordnung ist und eine andere Zahl (z.B. Fehlernummer) wenn es nicht funktionierte.

Hier wird die Prüfung nun umgedreht um zu sehen ob es funktionierte:

If not IrgenEineFunktion etc...


Aber was passiert nun eigentlich, wenn ich
If (4 + 3) = True then MsgBox "Hallo"
schreibe ?

Nun, dies können wir nun einfach auflösen,denn es steht nichts anderes da als:
If 7 = -1 und dies gibt nun für den Vergleich Falsch zurück.

If (4 + 3) = False then MsgBox "Hallo"
gibt für den Vergleich Falsch auch zurück, denn
If 7 = 0 ist von der Bedingung her auch Falsch.

Auch wenn Sie jetzt vielleicht vor lauter Falsch und Wahr denken, der Kerl hat einen an der Erbse und dies ist so wahr, wahrer geht's nicht ...

Denken Sie immer daran, ob Sie einen Vergleich haben oder nur einen Wert.

Denken Sie auch immer daran, dass True und False nichts anderes als Konstanten sind, mit den Werten -1 respektive 0.

Ich hoffe, ich konnte es Ihnen etwas näher bringen, ist aber nicht so einfach, in ein paar Zeilen.

Und vielleicht machen Sie ja jetzt das Quiz einfach nochmal.


Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben