Wenn man z.b. die Namen systematisch vergibt, à la ... (Beispiel)
CheckBox1 < - > TextBox1_1, TextBox1_2 | ComboBox1_1 | DateBox1_1
CheckBox2 < - > TextBox2_1, TextBox2_2 | ComboBox2_1 | DateBox2_1
usw.
... kann man die Controls dann zur Laufzeit mappen, d.h. per Klassen-Programmierung einen Wrapper schreiben, der eigene Events bereit stellt (Click, Change, etc. auf eine CheckBox oder ein anderes beliebiges gemapptes Control) und so den Code leserlicher/verinfacht gestaltet. Allerdings nicht ohne vorher einiges an Manpower reinzustecken. Der Code wird dadurch zwar leserlicher/kompakter, aber nicht zwingend kürzer.
Ich will dir damit nur sagen, es gibt hier schon elegante Lösungen, aber nichts was mal in 30 Minuten runtergehackt wäre.
Grüße
PS: Mit Wrapper ist gemeint, dass man dann kein
Private Sub CheckBox1_Click()
End Sub
Private Sub CheckBox2_Click()
End Sub
Private Sub CheckBox3_Click()
End Sub
usw. mehr hat, sondern ein Event der diese drei (oder mehr) in einem einzigen Event bündelt:
Private WithEvents MyControlWrapper As VBAProject.MyControlWrapper 'Member-Variable mit Zugriff auf dessen bereitgestellte Events deklarieren
'...
Private Sub MyControlWrapper_OnClick(ByVal Control As MSForms.Control)
End Sub
Control ist, dem obigen Beispiel weiter folgend, dann entweder CheckBox1, CheckBox2 oder CheckBox3 - je nachdem auf welches Control gerade geklickt wurde.
Jetzt kann man hier natürlich den Funktionskopf noch erweitern, sodass man z.B. auch alle auf diese CheckBox gemappten Controls (ich nenne sie mal ControlSubs) mitbekommt.
Private Sub MyControlWrapper_OnClick(ByVal Control As MSForms.Control, ByVal ControlSubs As Variant)
End Sub
ControlSubs kann hier je nach Implementierung irgenwas sein, eine VBA.Collection, ein Array, oder was auch immer man möchte. Das ist einem frei überlassen.
|