Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

If, ElseIf verschachtelt

Forumthread: If, ElseIf verschachtelt

If, ElseIf verschachtelt
03.01.2018 15:56:25
Mia
Guten Tag!
Wünsche euch ein gutes und schönes neues Jahr!
Ich habe folgendes Problem. Ich frage in einer Userform die Pflichtfelder ab. Es klappt auch soweit bis ich zu den Bedingungen unten weiter komme. Hier dürfte ich ein ElseIF oder ein EndIf falsch gesetzt haben aber ich komme einfach nicht drauf wie ich die IF's verschieben müsste das es klappt.
Also die oberen sind selbsterklärend. Kurz zu dem Problemteil. Wenn in txtbox2 ein Wert drin steht (es sind in diesen Textboxen nur numerische Eingaben möglich) und es sich um einen ungeplanten Stillstand handelt soll er nachsehen ob in den beiden Feldern etwas drin steht. Ist dies nicht der Fall soll wieder eine Nachricht kommen mit der Aufforderung diese Felder auszufüllen.
Das erste klappt, sprich wenn ungeplant dann erwartet er zumindest einen Wert in txtbox1 und wenn ein Wert drin steht wird auch abgefragt ob man alles ausgefüllt hat. Habe ich jetzt aber auch einen Wert in txtbox2 stehen läuft er einfach weiter und speichert die Userform ohne das die beiden Mussfelder ausgefüllt sind.
Ich weiß ein paar mehr Augen können hier sicher helfen. So btw gibt es Editoren mit denen man den Code visualisieren kann? Wäre für mich ziemlich hilfreich wenn ich so wie hier sehen würde welche If, ElseIf und EndIf mit wem zusammengehört. Habe mal in Eclipse Java programmiert und hier konnte man den Code automatisch anpassen und er hat sich automatisch so eingerückt wie er zusammengehört. Gegen Farbe hätte ich auch nicht ;-P.
If Rüster.Value = "" Or _
Schicht.Value = "" Or _
FB.Value = "" Or _
Linie.Value = "" Or _
Produkt1.Value = "" Or _
Produkt2.Value = "" Or _
TextBox22.Value = "" Or _
TextBox2.Value = "" Or _
GeplantUngeplant.Value = "" Then
b = MsgBox("Bitte füllen Sie alle mit * gekennzeichneten Felder aus!", vbOKOnly)
Exit Sub
ElseIf GeplantUngeplant.Value = "ungeplant" Then
If txtbox1.Value = "" Then
b = MsgBox("Bitte geben Sie die Dauer des ungeplanten Stillstands an", vbOKOnly)
Exit Sub
ElseIf txtbox1.Value  "" Then
If TextBox7.Value = "" Or ungeplStillstand1.Value = "" Then
b = MsgBox("Bitte Problem  und/oder Grund für ungeplanten Stillstand eingeben", vbOKOnly)
Exit Sub
End If
End If
ElseIf txtbox2.Value > 1 & GeplantUngeplant.Value = "ungeplant" Then
If TextBox19.Value = "" Or ungeplStillstand2.Value = "" Then
b = MsgBox("Bitte Problem  und/oder Grund für ungeplanten Stillstand eingeben", vbOKOnly)
Exit Sub
End If
ElseIf txtbox3.Value > 1 & GeplantUngeplant.Value = "ungeplant" Then
If TextBox17.Value = "" Or ungeplStillstand3.Value = "" Then
b = MsgBox("Bitte Problem  und/oder Grund für ungeplanten Stillstand eingeben", vbOKOnly)
Exit Sub
End If
ElseIf txtbox4.Value > 1 & GeplantUngeplant.Value = "ungeplant" Then
If TextBox15.Value = "" Or ungeplStillstand4.Value = "" Then
b = MsgBox("Bitte Problem  und/oder Grund für ungeplanten Stillstand eingeben", vbOKOnly)
Exit Sub
End If
ElseIf txtbox5.Value > 1 & GeplantUngeplant.Value = "ungeplant" Then
If TextBox21.Value = "" Or ungeplStillstand5.Value = "" Then
b = MsgBox("Bitte Problem  und/oder Grund für ungeplanten Stillstand eingeben", vbOKOnly)
Exit Sub
End If
End If
Danke schon für eure Hilfe!
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Statt &, AND (owT)
03.01.2018 16:10:49
EtoPHG

AW: Statt &, AND (owT)
04.01.2018 08:44:28
Mia
Vielen Dank für diesen Tipp, ist bestimmt hilfreich aber es löst mein Problem nicht. Ich kann einen Wert in txtbox2 eingeben aber er fragt nicht ab ob Textbox19 und ungeplStillstand2 leer sind. Der schreibt das einfach weg obwohl in den beiden Feldern nichts drin steht. Daher tippe ich ja darauf, dass ich irgendwo ein Elseif oder ein End If vergessen habe, sprich er geht in den Block

ElseIf GeplantUngeplant.Value = "ungeplant" Then
If txtbox1.Value = "" Then
...
hinein und weil in der txtbox1 ein Wert drin steht geht er raus und beendet das Ganze.
Wenn ich die Beiden End If's in diesem Block dann nach ganz unten verschiebe will er das ich die beiden Felder von txtbox2 eintrage. Habe ich das gemacht speichert er auch das weg. Also ohne einer Zeit und ohne das er mich nach txtbox3 fragen würde oder sich Gedanken machen würde ob die beiden Felder textbox17 und ungeplStillstand3 ausgefüllt sind.
Anzeige
AW: Statt &, AND (owT)
04.01.2018 09:26:39
Mia
Also ich habe versucht mir das mit dem Debugger anzusehen also obwohl der Wert in txtbox2 = "" ist geht er in diese Schleife rein. Ich habe jetzt schon größer gleich eingegeben aber das ändert auch nichts.
Ich verstehe einfach nicht wieso er trotzdem in diese Schleife hineingeht... Hat hier vlt jemand eine Idee?
Anzeige
AW: Statt &, AND (owT)
04.01.2018 13:41:53
Mia
Hat denn wirklich keiner eine Ahnung? Und ich glaube ich habe hier versehentlich zwei Beiträge verdreht. Naja ich würde sagen Anfänger in Sachen Forum ;-p sorry falls das stört.
Aber ich grübel immer mal wieder warum es nicht funktioniert. Ich verstehe einfach nicht warum er trotz das
ElseIf txtbox2 > 1....
siehe in meinem ersten Beitrag
Er in diese Schleife hineingeht wenn in txtbox2 nichts steht. Habe ich hier etwas in der Syntax falsch? Weil wenn ich die Werte dann eingetragen hab meckert wegen txtbox3 nicht mehr (wobei das könnte daran liegen dass ich die end if an das Ende stellen sollte). Aber warum geht er hinein... die Bedingung ist doch nicht erfüllt.
Die liebe Logik hat mich hier wohl verlassen. Ich hoffe es findet sich jemand mit einem Geistesblitz ;-)
Anzeige
AW: Statt &, AND (owT)
05.01.2018 13:34:18
EtoPHG
Hallo Mia,
eine Textbox enthält Text und eben keine Zahlen. Dein If wird selbst dann wahr, wenn die Textbox leer ist. Prüfe so:
ElseIf Val(txtbox2) > 1 ....
Gruess Hansueli
AW: Statt &, AND (owT)
08.01.2018 13:01:46
Mia
Ich danke dir!
Dieses Forum ist mein Lebensretter! Es sind immer nur Kleinigkeiten aber Kleinigkeiten summieren sich später auf.
Also bei so etwas immer Val() einsetzen?
Danke!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

If und ElseIf in VBA richtig verwenden


Schritt-für-Schritt-Anleitung

Um die If und ElseIf Bedingungen in VBA korrekt zu verwenden, kannst du folgende Schritte befolgen:

  1. Bedienung der Userform: Überprüfe zuerst, ob alle Pflichtfelder in deiner Userform ausgefüllt sind. Nutze dazu eine If-Abfrage.

    If Rüster.Value = "" Or Schicht.Value = "" Then
        MsgBox "Bitte füllen Sie alle mit * gekennzeichneten Felder aus!"
        Exit Sub
    End If
  2. Verwendung von ElseIf: Wenn die Bedingungen für ein ungeplantes Ereignis erfüllt sind, kannst du die ElseIf-Bedingungen verwenden, um spezifische Validierungen durchzuführen.

    ElseIf GeplantUngeplant.Value = "ungeplant" Then
        If txtbox1.Value = "" Then
            MsgBox "Bitte geben Sie die Dauer des ungeplanten Stillstands an"
            Exit Sub
        End If
  3. Verschachtelung der Bedingungen: Achte darauf, dass du die End If-Anweisungen korrekt platzierst. Jede If-Anweisung benötigt ein entsprechendes End If.

    ElseIf txtbox2.Value > 1 And GeplantUngeplant.Value = "ungeplant" Then
        If TextBox19.Value = "" Then
            MsgBox "Bitte Problem eingeben"
            Exit Sub
        End If
    End If
  4. Überprüfung der Eingaben: Stelle sicher, dass du numerische Eingaben korrekt abfragst, um unerwartete Ergebnisse zu vermeiden.

    ElseIf Val(txtbox2.Value) > 1 Then
        ' Weitere Überprüfungen
    End If

Häufige Fehler und Lösungen

  • Fehler: Die Abfrage in ElseIf wird trotz leerer Textbox ausgeführt.

    • Lösung: Verwende Val() um sicherzustellen, dass die Eingabe als Zahl interpretiert wird.
    ElseIf Val(txtbox2.Value) > 1 Then
  • Fehler: End If wird an der falschen Stelle platziert.

    • Lösung: Jede If-Bedingung muss mit einem End If abgeschlossen werden. Achte darauf, die Struktur beizubehalten.

Alternative Methoden

Falls du Probleme mit verschachtelten If-Anweisungen hast, kannst du auch Select Case verwenden, um die Logik klarer zu gestalten:

Select Case GeplantUngeplant.Value
    Case "geplant"
        ' Deine Logik hier
    Case "ungeplant"
        If txtbox1.Value = "" Then
            MsgBox "Bitte Dauer angeben"
        End If
End Select

Praktische Beispiele

Hier ist ein Beispiel, wie du die Eingaben in einer Userform validieren kannst:

If Rüster.Value = "" Then
    MsgBox "Feld Rüster ist leer!"
    Exit Sub
ElseIf GeplantUngeplant.Value = "ungeplant" Then
    If txtbox1.Value = "" Then
        MsgBox "Bitte Dauer des Stillstands angeben"
        Exit Sub
    ElseIf Val(txtbox2.Value) > 1 Then
        ' Weitere Abfragen
    End If
End If

Tipps für Profis

  • Visual Basic Editor: Nutze den Visual Basic Editor, um deinen Code übersichtlich zu halten. Farbige Markierungen helfen dabei, If, ElseIf und End If leichter zu erkennen.
  • Debugging: Setze Breakpoints und nutze das Debugging-Tool, um den Fluss deiner Bedingungen besser nachzuvollziehen.
  • Sauberer Code: Halte deinen Code ordentlich und strukturiert, um die Lesbarkeit und Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass alle Textboxen ausgefüllt sind? Verwende eine If-Bedingung, die alle relevanten Textboxen überprüft und eine Fehlermeldung ausgibt, falls sie leer sind.

2. Was ist der Unterschied zwischen If und ElseIf in VBA? If wird verwendet, um eine Bedingung zu prüfen. ElseIf bietet eine zusätzliche Bedingung, die geprüft wird, wenn die vorherige Bedingung nicht erfüllt ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige