Label in Frame ansprechen ohne Event
08.02.2015 11:29:48
Steffen
ich habe eine Userform in der ich 900 Labels mit Klick einzeln anwählen können soll. Bitte keine Hinweise zu der Umseztung - es ist aus optischen Gründen ausdrücklich so gewünscht.
Ich befürchte jedoch, dass es weitere Änderungswünsche geben wird und ich möchte danach nicht jedes einzelne der 900 Klickereignisse bearbeiten müssen.
Aus diesem Grund arbeite ich gerade das erste Mal mit Klassenmodulen und versuche folgenden sehr geilen Code an meine Bedürfnisse anzupassen:
Option Explicit
Private WithEvents mobjLabel As MSForms.Label
Private Sub Class_Terminate()
Set mobjLabel = Nothing
End Sub
Private Sub mobjLabel_Click()
If mobjLabel.ForeColor = vbBlack Then
mobjLabel.ForeColor = vbBlue
mobjLabel.Caption = "blau"
Exit Sub
End If
If mobjLabel.ForeColor = vbBlue Then
mobjLabel.ForeColor = vbBlack
mobjLabel.Caption = "schwarz"
Exit Sub
End If
End Sub
Friend Property Set prpobjLabel(ByVal objLabel As MSForms.Label)
Set mobjLabel = objLabel
End Property
Bei diesem spreche ich alle Labels auf der Userform an. Sie ändern in diesem Beispiel ihre Farbe also zu blau.
Frage hierzu: Wie müsste ich den Code abändern, damit er nur für Labels im Frame frm_main durchlaufen wird? Die anderen Labels ausserhalb des Frames sind Überschriften, Hinweistexte und ähnliches, die sich bei Klick auf sie nicht ändern sollen.
Hinweis vielleicht noch: der Frame frm_main wird dynamisch erstellt, ist also im Entwurfsmodus nicht vorhanden.
Habt ihr eine Idee zu dem konkreten Problem?
Und für was sind die Klassenmodule generell gedacht? Gerne weitere Infos.
VG Steffen