Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

If-Bedingung trotz WAHR übersprungen

If-Bedingung trotz WAHR übersprungen
19.09.2022 22:12:21
{Boris}
Hallo zusammen.
habe gerade das Phänomen, dass eine If-Abfrage trotz WAHR übersprungen wird.
Habe 2 Stringvariablen (von und nach), die ich mit
IF Len(von) And Len(nach) Then
prüfe - bedeutet für mich: Wenn beide Len-Abfragen eine Zahl größer Null ergeben, dann sollte die Bedingung WAHR sein.
Ist sie (in meinem Code) aber nicht - der If-Zweig wird übersprungen und direkt zu Else verzweigt.
Habe nen Haltepunkt gesetzt und die Variablenlängen im Direktfenster ausgelesen - 28 (von) und 33 (nach) - das sollte doch in Summe WAHR ergeben...?!
Habt ihr (ohne die Datei zu sehen) eine Idee, wo mein Denkfehler ist?
Userbild
Danke vorab!
VG, Boris

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Noch viel einfacher
19.09.2022 22:19:49
{Boris}
Hi,
beide diesem Code passiert gar nichts:

Sub test()
If 28 And 33 Then
MsgBox "Hallo"
End If
End Sub
Hier aber sehr wohl:

Sub test2()
If 27 And 33 Then
MsgBox "Hallo"
End If
End Sub
sehr wohl.
Bin irritiert... - bitte löst meinen Knoten ;-)
VG, Boris
Und noch einen obendrauf...
19.09.2022 22:29:33
{Boris}
Hallo zusammen,
mit Prüfung auf größer Null geht es:

Sub geht()
If 28 > 0 And 33 > 0 Then
MsgBox "Hallo"
End If
End Sub
Sub geht_nicht()
If 28 And 33 Then
MsgBox "Hallo"
End If
End Sub
Ich zweifel echt grad an mir...
VG, Boris
Anzeige
Logisch...
19.09.2022 23:18:05
{Boris}
Hi Onur,
Wenn sie auf numerische Werte angewendet werden, führt der And Operator einen bitweisen Vergleich von identisch positionierten Bits in zwei numerischen Ausdrücken aus und legt das entsprechende Bit entsprechend result der folgenden Tabelle fest.
Ich versteht kein Wort - aber das trifft es wohl.
Dir vielen Dank - Frage beantwortet!
VG, Boris
Anzeige
AW: Logisch...
19.09.2022 23:27:28
onur
Hi Boris,
Mit AND und OR kannst du binäre Zahlen addieren und subtrahieren usw. Das mit "Wahrheitswerte vergleichen" ist eigentlich nur ein Nebeneffekt dessen.
Gruß
Onur
Da hab ich echt wieder was gelernt...
19.09.2022 23:30:51
{Boris}
Hi Onur,
...war bisher immer in dem Glauben, dass 2 Zahlen ungleich Null mit And genauso WAHR ergeben wie eine. Aber somit prüfe ich demnächst halt jede einzelne Bedingung auf größer oder ungleich Null - und dann läuft es ja :-)
VG, Boris
So generell arbeitet nur die Xl-Fkt, ...
20.09.2022 05:37:50
Luc:-?
…Boris,
in VBA sind das Operatoren, die nur mit Wahrheitswerten so simpel fktionieren. Bei Zahlen erfolgt eine binäre Operation (wie Onur bereits ausführte). VBA kennt ja auch noch mehr derartige Operatoren (inkl Not insgesamt 6).
Das wäre also kein Phänomen, sondern eine ganz normale Berechnung, die hier erst anschließend in einen von If verlangten Wahrheitswert gewandelt wird. Ich benutze solche Operationen des Öfteren für Select Case-Operationen u.ä., weil solche Berechnungen schneller sind als Vgle.
Gruß, Luc :-?
Anzeige
Nachtrag
20.09.2022 05:43:49
Luc:-?
Nur mit fertigen Wahrheitswerten fktionieren logische Operatoren in VBA so wie die entsprd Xl-Fktt.
Morhn, Luc :-?
AW: Nachtrag - verstanden
20.09.2022 09:00:26
{Boris}
Hi Luc,
danke für Deine zusätzlichen Ausführungen!
Nur mit fertigen Wahrheitswerten fktionieren logische Operatoren in VBA so wie die entsprd Xl-Fktt
Daher prüfe ich nun einfach jede einzelne Bedingung stets zusätzlich auf größer/ungleich Null.
VG, Boris
AND in der praktischen Anwendung
20.09.2022 12:16:15
Daniel
Hi
Man braucht dieses AND beispielsweise dann, wenn man mit GetAttr(pathname) Dateieigenschaften auslesen will.
Diese Funktion gibt in einer Zahl die verschiedenen Dateieigenschaften zurück.
Treffen mehrere zu, werden diese addiert.
Dh
- 1 steht für Schreibgeschützt
- 16 steht für einen Ordner
- 32 heißt : Archivversion veraltet.
Dh ein Ordner hat normalerweise denn Wert 16.
Ist er aber auch noch Schreibgeschützt, 17.
Ein Ordner, dessen Archivversion veraltet ist, 48 und 49 wenn er zusätzlich schreibgeschützt ist.
Wenn du also wissen willst, ob ein Verzeichnisobjekt ein Ordner ist, kannst du nicht einfach abfragen

If GetAttr(pathname) = 16
, du müsstest auch auf 17, 48 und 49 prüfen (und noch auf weitere)
Hier kommt jetzt die AND-Funktion ins Spiel, mit der man prüfen kann, ob in einer Summe, die aus 2er-Potenzen zusammengesetzt ist, (1=2^0, 16=2^4, 32=2^5), eine bestimmte Potenz vorhanden ist:

If (GetAttr(pathname) And 16) = 16 then
Gruß Daniel
Anzeige
Sehr anschaulich erklärt...
20.09.2022 13:32:51
{Boris}
Hi Daniel,
...vielen Dank! Das leuchtet mir nun ein.
VG, Boris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige