Meldung für nicht ausgefüllte Textboxen, die Pflichtfelder sind.

Skayritares

Lt. Junior Grade
Registriert
Juli 2006
Beiträge
277
Hallo zusammen,

Ich weiß nicht, ob ich hier richtig bin.

Ich habe im Excel-Mappe eine Userform mit 10 Textboxen und in diese Textboxen sind Pflichtfelder, wenn ein Pflichtfeld nicht ausgefüllt ist kommt eine Fehlermeldung.
Die Textfelder "Txb_TlnTelRufnummer", "Txb_TlnTelRufnummer", "Txb_TlnEmail" und "Txb_TlnBemerkungen" sind optionale Textboxen und werden bei der Prüfung ausgenommen.

Dazu habe ich im Internet diesen Code gefunden und nach meinen Bedürfnissen angepasst
Code:
For Each objCtlTxb In Controls
      Select Case TypeName(objCtlTxb)
        Case "TextBox"
          If Not objCtlTxb.Name = "Txb_TlnTelVorwahl" _
          And Not objCtlTxb.Name = "Txb_TlnTelRufnummer" _
          And Not objCtlTxb.Name = "Txb_TlnEmail" _
          And Not objCtlTxb.Name = "Txb_TlnBemerkungen" Then
            If objCtlTxb.Value = "" Then
              MsgBox "Bitte alle Felder im Bereich Teilnehmer-Stammdaten ausfüllen!", vbExclamation + vbOKOnly, "Fehlende Angaben"
              objCtlTxb.BackColor = RGB(255, 200, 200)
              'Exit Sub
            End If
          End If
      End Select
    Next
  End If


Nur habe ich das Problem, dass er für jedes Pflichtfeld, das leer bleibt, eine Meldung bringt.
Besteht die Möglichkeit, diesen Code so zu verändern, dass unabhängig von der Anzahl der leeren Pflichtfelder, die Meldung nur einmal erscheint?

Ich nutze Office 2016
 
Zuletzt bearbeitet:
Ich würde statt der MsgBox in Linie 9 eine Variable auf "true" setzen, wenn eine leere Textbox erkannt und dann außerhalb der For-Each-Schleife abfragen ob jene Variable "true" ist und wenn ja, erst dann die MsgBox ausgeben.
 
  • Gefällt mir
Reaktionen: Skayritares
Wieso nutzt du case und gehst dann auf den Typename und nicht auf .Name und identifizierst dann jeden Fall für sich und steigst mit nem Exit aus? dann kannst sogar einen Text entsprechend der jeweiligen Textbox ausgeben
Ergänzung ()

Skayritares schrieb:
Bereich Teinehmer-Stammdaten ausfüllen!
oh: und hier Typo: "Teilnehmer"
 
Ich habe diesen Code geändert und ausprobiert und es klappt prima!
Danke an auch allen! 😀❤️‍

Hier
Code:
Dim objCtlTxb As Control
Dim msgfa As Boolean '<- Diese Variable dient als Schalter damit die Meldung angezeigt wird.

For Each objCtlTxb In Controls
    Select Case TypeName(objCtlTxb)
      Case "TextBox"
        If Not objCtlTxb.Name = "Txb_TlnTelVorwahl" _
        And Not objCtlTxb.Name = "Txb_TlnTelRufnummer" _
        And Not objCtlTxb.Name = "Txb_TlnEmail" _
        And Not objCtlTxb.Name = "Txb_TlnBemerkungen" Then
          If objCtlTxb.Value = "" Then ''<- Diese Variable wird aktiviert.
            msgfa = True
            objCtlTxb.BackColor = RGB(255, 200, 200)
            'Exit Sub
          End If
        End If
    End Select
  Next

  If msgfa = True Then '<- Wenn die Variable msgfa auf True gesetzt ist, dann wird die Meldung ausgegeben.
    MsgBox "Bitte alle Felder im Bereich Teilnehmer-Stammdaten ausfüllen!", vbExclamation + vbOKOnly, "Fehlende Angaben"
    msgfa = False '<- Schalte die Variable auf False, weil diese nicht mehr gebraucht wird.
  End If

Wer einen anderen Vorschlag hat, kann gerne hier posten, auch für diese bin ich schon mal im voraus dankbar.
 
Zuletzt bearbeitet:
Du könntest noch aus der For Schleife aussteigen, sobald das erste leere Feld gefunden wurde.

Exit For

Das spart im Zweifel ein paar Runden :-)

Edit: Sehe gerade, dass ja auch Frabe gesetzt wird....never mind :-)
 
  • Gefällt mir
Reaktionen: Skayritares
Janush schrieb:
Du könntest noch aus der For Schleife aussteigen, sobald das erste leere Feld gefunden wurde.
Der zuletzt von mir geposteter Code funktioniert sehr gut, die Meldung erscheint erst dann nicht mehr, wenn alle Pflichtfelder im Userform ausgefüllt sind. Habe es gestern Abend getestet.

Außerdem auch ich noch eine Änderung vorgenommen:

Von so:
Code:
          If objCtlTxb.Value = "" Then ''<- Diese Variable wird aktiviert.
            msgfa = True
            objCtlTxb.BackColor = RGB(255, 200, 200)
            'Exit Sub
          End If
Nach so:
Code:
          If objCtlTxb.Value = "" Then ''<- Diese Variable wird aktiviert.
            'msgfa = True
            MsgBox "Bitte alle Felder im Bereich Teilnehmer-Stammdaten ausfüllen!", vbExclamation + vbOKOnly, "Fehlende Angaben"
            objCtlTxb.BackColor = RGB(255, 200, 200)
          Else
            objCtlTxb.BackColor = RGB(255, 255, 255)
          End If
Diese Änderung sorgt dafür, dass die in Rosa gefärbte Felder wieder Weiß werden, wenn diese ausgefüllt werden.
 
Zuletzt bearbeitet:
Zurück
Oben