VBA mehrere Textboxen außer XY auf Inhalt prüfen?
Hallo zusammen,
kann man für mehrere Textboxen bis auf Ausnahmen den gleichen Inhalt prüfen?
Zu Sache: Ich habe ein Userform mit einer Multiseite mit 10 Pages. Jeder Page hat 63 Textboxen, ergo 630 Textboxen im gesamten Userform.
Von diesen 630 Textboxen muss in 620 Textboxen geprüft werden, ob diese entweder leer sind oder eine Uhrzeit steht. Wenn dieses der Fall ist, dann ist alles Ok. Ansonsten soll entsprechend der Vorgang abgebrochen werden.
Die 620 Textboxen haben alle individuelle Namen wie (AN1t1a, AN1t1e, AN1t2a usw.) Dies ist nach einem bestimmten Muster.
Die restlichen Textboxen, die NICHT geprüft werden sollen haben Namen wie (AN_Name1, AN_Name2, AN_Name3 usw. bis 10).
Wie können nun alle 620 Textboxen auf folgendes Format geprüft werden:
Private Function CheckTime(ByVal txt As String) As Boolean
If txt.Length <> 5 or txt.Length <> 0 Then
Return False
End If
If txt(0) >= "3" Then
Return False
End If
If txt(0) = "2" AndAlso txt(1) >= "4" Then
Return False
End If
If txt(2) <> ":" Then
Return False
End If
If txt(3) = "0" AndAlso txt(4) <> "0" Then
Return False
End If
If txt(3) = "1" AndAlso txt(4) <> "5" Then
Return False
End If
If txt(3) = "2" Then
Return False
End If
If txt(3) = "3" AndAlso txt(4) <> "0" Then
Return False
End If
If txt(3) = "4" AndAlso txt(4) <> "5" Then
Return False
End If
If txt(3) > "4" Then
Return False
End If
Return True
End Function
Falls die Prüfung auf die korrekte Uhrzeit fehlerhaft ist oder auch einfacher geht, nehme ich die Hilfe auch gerne an :) Erlaubte Uhrzeiten sollen im Forma HH:MM sein und im Viertelstunden Takt (10:00, 10:15, 10:30, 10:45) erlaubt sein. Nur Zahlen sind nicht möglich, da es auch einen Doppelpunkt gibt ;)
Gruß
1 Antwort
Du kannst über die Elemente mit deiner Textbox Namens Regel iterieren.
Dim test
For i = 1 to 630
test = UserForm1.Controls("AN1t" & i & "a").Text
test = UserForm1.Controls("AN1t" & i & "e").Text
next i
Nur zum logischen Verständnis, kann ich das dann quasi so machen:
Dim test
For ia = 1 to10
For ib = 1 to 31
test = UserForm1.Controls("AN" & ia & "t" & ib & "a").Text
test = UserForm1.Controls("AN" & ia & "t" & ib & "e").Text
next i
Ja, sollte auch gehen. Am Schluss muss halt dar objekt Name auch groß klein Schreibung richtig sein. Um dies zu prüfen könnte man den Controller Namen zunächst erst in einer string Variablen bauen, die dann im watch Fenster Beobachtbar ist.
Na so leicht ist es glaube ich nicht. Die Textfelder heißen:
AN1t1a, AN1t1e
AN1t2a, AN1t2e
AN1t3a, AN1t3e
Dies ist quasi wie folgt aufgebaut. Es beginnt immer mit AN. Dann folgt eine Zahl von 1-10. Dann folgt der Buchstabe T, dann eine Zahle von 1-31 und dann abwechselnd a für Anfang und e für Ende.
Sprich erste Textbox: AN1t1a
Letzte Textbox: AN10t31e