lass dich durch diese Beiträge nicht unterkriegen. Du hast sicher einen bestimmten Grund, warum du die Labels dynamisch erstellen willst. Wie Gast 73147 bereits schrieb solltest du dich dafür mit Klassenprogrammierung beschäftigen. Das ist aber nicht so schwer wie es zunächst den Anschein hat.
Füge über Module einfügen ein Klassenmodul (z.B. Klasse1) ein. Dort definierst du eine Variable vom Typ des gewünschten Objekts mit WithEvents. Anschließend kannst du auf alle Ereignisse zugreifen, die dieses Objekt bietet. Der Code im Klassemodul kann z.B. so aussehen:
Public WithEvents lbl As MSForms.Label
Private Sub lbl_Click()
MsgBox "Name: " & lbl.Name & " Caption: " & lbl.Caption
End Sub
Nun musst du noch deinen bestehenden Code mit dem Klassenmodul verknüpfen. Dazu musst du ihn nur um 3 Zeilen erweitern. Das sind die drei Zeilen die hier die Variable lbls enthalten:
Dim lbls As New Collection
Private Sub CommandButton1_Click()
Dim theLabel As Object
Dim labelCounter As Long
For labelCounter = 1 To 3
Set theLabel = UserForm1.Controls.Add("Forms.Label.1", "Test" & labelCounter, True)
With theLabel
.Caption = "Test" & labelCounter
.Left = 10
.Width = 50
.Top = 30 * labelCounter
End With
lbls.Add New Klasse1
Set lbls(lbls.Count).lbl = theLabel
Next
End Sub
Die erste zeile legt eine neue Collection an. Die gehört in den Modulkopf also vor die erste Sub. Die zweite Zeile lbls.add fügt ein neues KLassenobjekt der Collection hinzu. In der dritten Zeile fügst du der Eigenschaft lbl dieses Klassenobjekts dann das eigentliche Lable hinzu auf das im Ereignishandler verwiesen werden soll.
Nochmal: Im Klassenmodul definierst du ein einheitliches Ereignis für alle drei Labels. Diese kannst du leicht über lbl.Name unterscheiden, falls es dann doch zu Diversitäten kommen soll. Ist wirklich nicht schwer, oder?
Gruß Mr. K.