Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Userform mehrer Textboxen prüfen

Userform mehrer Textboxen prüfen
Peter
Hallo zusammen,
ich habe eine Userform mit mehreren Textboxen. Diese sollen zum Teil auf Datum/Zahl/Ganzzahl geprüft werden.
Wie kann ich die Textboxen zusammenfassen, damit der jeweilige Prüfungs-Code nur einmal geschrieben werden muss.
(Die Alternative, den Code in das jeweilige Change-Ereignis zu schreiben ist mir zu mühsam und unübersichtlich).
Grüße Peter
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Userform mehrer Textboxen prüfen
21.05.2012 10:48:08
ChrisL
Hi Peter
Hier ein Beispiel:
Private Sub CommandButton1_Click()
Call CheckDatum("TextBox1")
Call CheckDatum("TextBox2")
Call CheckZahl("TextBox3")
End Sub

Private Sub CheckDatum(strTB As String)
If Not IsDate(Controls(strTB)) Then _
MsgBox "Kein Datum in " & strTB
End Sub

Private Sub CheckZahl(strTB As String)
If Not IsNumeric(Controls(strTB)) Then _
MsgBox "Kein Datum in " & strTB
End Sub

Gruss
Chris
Anzeige
strTB
21.05.2012 10:55:48
Rudi
Hallo Chris,
warum nicht gleich das Objekt?
Private Sub CommandButton1_Click()
Call CheckDatum(TextBox1)
End Sub
Private Sub CheckDatum(objTB As Object)
If Not IsDate(objTB) Then _
MsgBox "Kein Datum in " & objTB.Name
End Sub

Gruß
Rudi
Anzeige
AW: strTB
21.05.2012 11:08:37
ChrisL
Stimmt Rudi, aber vielleicht will er ja noch eine Schleife :)
Private Sub CommandButton1_Click()
Dim i As Byte
For i = 1 to 10
Call CheckDatum("TextBox" & i)
Next i
End Sub
cu
Chris
AW: Userform mehrer Textboxen prüfen
21.05.2012 10:49:59
Rudi
Hallo,
schreib ihn 1x und ruf ihn im Change auf.
Gruß
Rudi
Anzeige
AW: Userform mehrer Textboxen prüfen
21.05.2012 12:12:20
Peter
Danke für die Antworten,
ich habe ihn einmal geschrieben, und im Change aufgerufen - funktioniert auch super.
Nur sind es inzwischen 60 verschiedene Textboxen mit Datum,
60 mit Ganzzahl und ca. 30 mit Zahl zum Prüfen.
Mein Gedanke ist, das Change einer Gruppe zu erfassen siehe Beispiel 146101v.xls. Nur schaffe ich es nicht, diese Gruppen zu erstellen - oder ist dies gar nicht möglich?
Dient eher der Faulheit, damit ich nicht so viele Cange schreiben/kopieren muss. Vor allem, wenn ich später was ändern will.
Beispiel (112600v.xls abgewandelt)
Private Sub tb_SK_max_gültig_1_Change()
Dim Text$, Ausgabe_Label$, Text_SelStart$, Text_SelLength$
With tb_SK_max_gültig_1
Text = .Text
' Prozedur zum Datum prüfen
Datum_prüfen Text, Text_SelStart, Text_SelLength, Ausgabe_Label
' Werte ausgeben
.Text = Text
If Text_SelStart  "" Then .SelStart = Int(Text_SelStart)
If Text_SelLength  "" Then .SelLength = Int(Text_SelLength)
End With
With lbl_SK_max_gültig_1
If IsDate(Ausgabe_Label) Then
.Caption = Format(Ausgabe_Label, "dd.MM.yy")
Else
.Caption = Ausgabe_Label
End If
End With
End Sub
Sub Datum_prüfen(Text$, Text_SelStart$, Text_SelLength$, Ausgabe_Label$)
' Eingabe ohne Punkte, nur Zahlen mit je 2 Stellen
Dim dteEingabe As Date
Dim iDay As Integer, iMonth As Integer, iYear As Integer
If Text = "" Then Exit Sub
If Not IsNumeric(Right(Text, 1)) Then
Beep
Text_SelStart = Len(Text) - 1
Text_SelLength = 1
Ausgabe_Label = "Nur Ziffern erlaubt!"
Exit Sub
Else
Ausgabe_Label = ""
End If
iDay = CInt(Left(Text, 2))
Select Case Len(Text)
Case 0
Case 1
If iDay > 3 Then
Beep
Text_SelStart = 0
Text_SelLength = 1
Ausgabe_Label = "Maximal 31 Tage"
Else
Ausgabe_Label = ""
'Text_SelStart = 1
End If
Case 2
If iDay > 31 Then
Beep
Text_SelStart = 0
Text_SelLength = 2
Ausgabe_Label = "Maximal 31 Tage"
Else
Ausgabe_Label = ""
'Text_SelStart = 2
End If
Case 3
iMonth = CInt(Right(Text, 1))
If iMonth > 1 Then
Beep
Text_SelStart = 2
Text_SelLength = 1
Ausgabe_Label = "Maximal 12 Monate"
Else
Ausgabe_Label = ""
'Text_SelStart = 3
End If
Case 4
iMonth = CInt(Right(Text, 2))
If iMonth > 12 Then
Beep
Text_SelStart = 2
Text_SelLength = 2
Ausgabe_Label = "Maximal 12 Monate"
Else
Ausgabe_Label = ""
Text_SelStart = 4
End If
Select Case iMonth
Case 2
If iDay > 29 Then
Beep
Text_SelStart = 0
Text_SelLength = 4
Ausgabe_Label = "Maximal 29 Tage"
Else
Ausgabe_Label = ""
'Text_SelStart = 4
End If
Case 4, 6, 9, 11
If iDay > 30 Then
Beep
Text_SelStart = 0
Text_SelLength = 4
Ausgabe_Label = "Maximal 30 Tage"
Else
Ausgabe_Label = ""
'Text_SelStart = 4
End If
End Select
Case 6
iMonth = CInt(Mid(Text, 3, 2))
iYear = CInt(Right(Text, 2))
If iYear Mod 4 > 0 And iMonth = 2 And iDay = 29 Then
Beep
Text_SelStart = 0
Text_SelLength = 6
Ausgabe_Label = "Maximal 28 Tage"
Else
dteEingabe = DateSerial(iYear, iMonth, iDay)
Ausgabe_Label = dteEingabe
Text_SelStart = 0
Text_SelLength = 6
End If
End Select
End Sub
Gruß Peter
Anzeige
AW: Userform mehrer Textboxen prüfen
21.05.2012 13:10:43
Rudi
Hallo,
oder ist dies gar nicht möglich?
doch, mit einer eigenen Klasse.
Deinen Code finde ich extrem umständlich. Prüfe doch einfach mit IsDate()
Gruß
Rudi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Userform mit mehreren Textboxen effizient prüfen


Schritt-für-Schritt-Anleitung

  1. Erstelle eine Userform.

    • Öffne den VBA-Editor (Alt + F11) und füge eine neue Userform hinzu.
    • Füge mehrere Textboxen (z.B. TextBox1, TextBox2, ...) hinzu.
  2. Füge einen CommandButton hinzu.

    • Ziehe einen CommandButton auf die Userform und benenne ihn z.B. CommandButton1.
  3. Schreibe den Prüfungs-Code.

    • Klicke mit der rechten Maustaste auf die Userform und wähle "Code anzeigen".
    • Verwende folgenden Beispielcode:
      
      Private Sub CommandButton1_Click()
      Dim i As Byte
      For i = 1 To 10 ' Passe die Zahl an deine Textboxen an
         Call CheckDatum("TextBox" & i)
      Next i
      End Sub

    Private Sub CheckDatum(strTB As String) If Not IsDate(Controls(strTB)) Then MsgBox "Kein Datum in " & strTB End If End Sub

  4. Teste die Userform.

    • Starte die Userform und gib Werte in die Textboxen ein. Klicke auf den Button und überprüfe die Meldungen.

Häufige Fehler und Lösungen

  • Fehler: "Kein Datum in TextBoxX" wird angezeigt, obwohl ein Datum eingegeben wurde.

    • Lösung: Stelle sicher, dass das Datum im richtigen Format eingegeben wird. Überprüfe auch die Regional- und Spracheinstellungen in Excel.
  • Fehler: Die Textboxen werden nicht erkannt.

    • Lösung: Überprüfe die Schreibweise der Textboxnamen im Code und stelle sicher, dass die Textboxen korrekt benannt sind.

Alternative Methoden

  • Verwendung von Klassenmodulen: Du kannst eine eigene Klasse erstellen, die die Überprüfung für mehrere Textboxen zentralisiert. Dies macht den Code übersichtlicher und wartungsfreundlicher.
' Beispiel für eine Klassenmodul-Implementierung
Private Sub CheckAllTextBoxes()
    Dim tb As Control
    For Each tb In Me.Controls
        If TypeOf tb Is MSForms.TextBox Then
            Call CheckDatum(tb)
        End If
    Next tb
End Sub
  • Event-Handler für mehrere Textboxen: Du kannst auch den Change-Event für eine Gruppe von Textboxen nutzen, um die Eingaben zu validieren.

Praktische Beispiele

Um die Effizienz deiner Userform zu steigern, hier ein Beispiel zur Überprüfung mehrerer Textboxen auf Ganzzahlen und Zahlen:

Private Sub CommandButton1_Click()
    Call CheckZahl("TextBox3")
    Call CheckGanzzahl("TextBox4")
End Sub

Private Sub CheckZahl(strTB As String)
    If Not IsNumeric(Controls(strTB)) Then
        MsgBox "Kein gültiger Wert in " & strTB
    End If
End Sub

Private Sub CheckGanzzahl(strTB As String)
    If Int(Controls(strTB)) <> Controls(strTB) Then
        MsgBox "Bitte nur Ganzzahlen in " & strTB
    End If
End Sub

Tipps für Profis

  • Nutze Fehlerbehandlung: Füge On Error Resume Next hinzu, um unerwartete Fehler zu vermeiden.

  • Verwende Arrays: Speichere die Namen der Textboxen in einem Array, um die Wartung zu erleichtern.

  • Gruppiere Textboxen logischerweise: Ordne Textboxen, die ähnliche Eingaben erfordern, in Gruppen an, um den Code zu vereinfachen.


FAQ: Häufige Fragen

1. Wie viele Textboxen kann ich in einer Userform haben? Du kannst theoretisch so viele Textboxen hinzufügen, wie du benötigst. Achte jedoch auf die Übersichtlichkeit und Benutzerfreundlichkeit.

2. Kann ich die Eingaben in den Textboxen dynamisch ändern? Ja, du kannst die Eingaben zur Laufzeit ändern, indem du den Code in den entsprechenden Ereignissen anpasst.

3. Wie kann ich die Eingaben aller Textboxen gleichzeitig überprüfen? Du kannst eine Schleife verwenden, um alle Textboxen in der Userform zu durchlaufen und zu überprüfen, indem du den oben genannten Code anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige