AW: UF-Text,-ComboBox prüfen
30.01.2018 10:09:18
Peter(silie)
Hallo,
dann kannst du aber auch mit Klassen arbeiten.
Hier ein Beispiel:
(nicht getestet)
UserForm Code:
Option Explicit
'Counter der bei Btn Click geprüft wird
Public ValidationCounter As Long
Public MaxAmount As Long
'Farben
Public Enum Colors
LightBlue = 16777152
BlueCustom = 16721920
WhiteDarker = 15921906
End Enum
'Klassen Objekte für die Controls
Private cls_vc() As ValidationControl
Private Sub CommandButton1_Click()
'Falls Counter = Prüfsumme dann mach was
If ValidationCounter = MaxAmount Then Debug.Print "Do Stuff"
End Sub
Private Sub UserForm_Initialize()
Dim intCounter As Integer
DefineValidationObjects
For intCounter = 1 To 12
cboSt1.AddItem Format(DateSerial(1, intCounter, 1), "mmmm")
Next
For intCounter = 2 To 3
Controls("cboSt" & intCounter).List = cboSt1.List
Next
cmdSave.Enabled = False
End Sub
Private Sub DefineValidationObjects()
Dim ctl As Control
Dim i As Long
i = 1
For Each ctl In Me.Controls
Select Case TypeName(ctl)
Case "ComboBox"
If Left(ctl.Name, 5) = "cboSt" Then
ReDim Preserve cls_vc(i)
Set cls_vc(i) = New ValidationControl
Set cls_vc(i).clsCombobox = ctl
i = i + 1
End If
Case "TextBox"
If Left(ctl.Name, 5) = "txtSt" Then
ReDim Preserve cls_vc(i)
Set cls_vc(i) = New ValidationControl
Set cls_vc(i).clsTextbox = ctl
i = i + 1
End If
End Select
Next ctl
MaxAmount = i
End Sub
ValidationControl Klasse:
Option Explicit
Public WithEvents clsTextbox As MSForms.TextBox
Public WithEvents clsCombobox As MSForms.ComboBox
Private Sub clsTextbox_Change()
If Len(clsTextbox.Value) 0 Then
UserForm1.ValidationCounter = UserForm1.ValidationCounter - 1
End If
Else
clsTextbox.BackColor = Colors.WhiteDarker
If UserForm1.ValidationCounter 0 Then
UserForm1.ValidationCounter = UserForm1.ValidationCounter - 1
End If
Else
clsTextbox.BackColor = Colors.WhiteDarker
If UserForm1.ValidationCounter
Bei 300+ Controls ist das wesentlich kürzer als 300 Change Events in die Userform zu prügeln.
Keine Ahnung ob der Counter reibungslos funktioniert in der Form,
allerdings ist es wesentlich schneller wenn du bei einem Btn Click 2 Integer vergleichst
als 300 Controls abzuklappern