HERBERS Excel-Forum - das Archiv

Thema: If Makro funktioniert nicht

If Makro funktioniert nicht
Simon1602
Hi habe hier eine relative einfache If-Abfrage innerhalb einer UserForm. Er soll ein paar Textboxen überprüfen ob diese ausgefüllt werden - je nach dem welcher Einheitswert vergeben ist. Der Erste Schritt mit dem Preis funktioniert wunderbar. Bei der zweiten Ebene mit m2 produziert er jedoch immer die Messagebox und beendet den Sub. Auch wenn der Einheitspreis ein ganz anderer ist. Wenn dann Länge und Breite gefüllt sind geht er zur nächsten Position und will plötzlich noch die Höhe haben. Er springt immer auf den Fehler an......? Aber wieso? Vielleicht hat jemand eine Idee? Der Code sieht so aus:

If ob_niedrig.Value = False And ob_mittel.Value = False And ob_hoch.Value = False Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Wählen Sie einen Einheitspreis aus!"
Exit Sub
ElseIf txb_Einheit.Value = "m2" And txb_Laenge.Value = "" Or txb_Breite.Value = "" Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie Länge und Breite korrekt aus!"
Exit Sub
ElseIf txb_Einheit.Value = "m3" And txb_Laenge.Value = "" Or txb_Breite.Value = "" Or txb_Hoehe.Value = "" Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie Länge, Breite und Höhe korrekt aus!"
Exit Sub
ElseIf txb_Einheit.Value = "lm" And txb_Laenge.Value = "" Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie die Länge korrekt aus!"
Exit Sub
End If
AW: If Makro funktioniert nicht
Kuwer
Hallo,

klammere mal die Or´s ein:

If ob_niedrig.Value = False And ob_mittel.Value = False And ob_hoch.Value = False Then

MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Wählen Sie einen Einheitspreis aus!"
Exit Sub
ElseIf txb_Einheit.Value = "m2" And (txb_Laenge.Value = "" Or txb_Breite.Value = "") Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie Länge und Breite korrekt aus!"
Exit Sub
ElseIf txb_Einheit.Value = "m3" And (txb_Laenge.Value = "" Or txb_Breite.Value = "" Or txb_Hoehe.Value = "") Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie Länge, Breite und Höhe korrekt aus!"
Exit Sub
ElseIf txb_Einheit.Value = "lm" And txb_Laenge.Value = "" Then
MsgBox "Es sind nicht alle Pflichtfelder gefüllt! Füllen Sie die Länge korrekt aus!"
Exit Sub
End If


Gruß, Uwe
AW: If Makro funktioniert nicht
Simon1602
Super Danke! Es waren wirklich die Klammern :)
AW: If Makro funktioniert nicht
Oppawinni
Vermutlich braucht es Klammern um die zwei Dinger, die du mit OR verknüpfst.
AW: If Makro funktioniert nicht
daniel
Hi
auch bei der boolschen Operatoren gibt es eine PUNKT VOR STRICH-Regel
dh wenn du mehrere Operatoren in einem Ausdruck hast, werden zuerst die AND berechnet und dann die OR.
will man die Guppen anders bilden, muss man klammern setzen:

ElseIf txb_Einheit.Value = "m2" And (txb_Laenge.Value = "" Or txb_Breite.Value = "" )Then

oder man staffelt die IFs:

elseif Einheit.Value = "m2" Then
  if txb_Laenge.Value = "" Or txb_Breite.Value = "" then


Gruß Daniel

AW: If Makro funktioniert nicht
Simon1602
Ja das war es! Vielen Dank für deine Antwort
AW: If Makro funktioniert nicht
Marc
Dann scheint ja immer die erste If Else Abfrage zu greifen...

Ich persönlich würde alle If Else Abfragen zum testen als einzelne If Then Abfrage schreiben ohne sie zu verschachteln und vor jeder Abfrage IF/Else eine Msgbox einfügen die mir die Werte ausgibt, die in der nächsten Abfrage getestet werden...

Zudem ist es so, bei einer so verschachtelten Abfrage muss man sich immer bewusst sein, wenn auch nur eine der Abfragen greift, werden alle anderen egal ob sie auch richtig wären oder nicht verworfen ...

sprich wenn
"ElseIf txb_Einheit.Value = "m2" And txb_Laenge.Value = "" Or txb_Breite.Value = "" Then"
richtig wäre, aber auch
"ElseIif txb_Einheit.Value = "m3" And txb_Laenge.Value = "" Or txb_Breite.Value = "" Or txb_Hoehe.Value = ""

dann wird nur die erste Abfrage abgearbeitet, nicht die zweite, weil diese automatisch verfällt...