Ich würde Dir empfehlen ActiveX-Steuerelemente anstelle Formularsteuerelementen einzusetzen.
In einer Collection merkst Du Dir dann die erstellten (ActiveX)ListBoxen und das Schlüsselwort WithEvents hilft Dir dabei zu erkennen, ob mit den Listboxen irgendwas passiert. (Bspw einer der folgenden Events)
Eine Listbox legst Du dann wie folgt an:
Dim temp As Excel.Worksheet
Set temp = Worksheets("Generator")
With temp.OLEObjects.Add(ClassType:="Forms.ListBox.1")
.Name = "ListBox1"
'// sonstwas
End With
Folgende Prozedur (in einem allgemeinen Modul) muss durchlaufen werden, sobald Du eine neue Listbox hinzufügst:
Sub CollectionFüllenDaListboxErzeugt()
Dim clslstBox As clsListBoxen
Dim oOleObject As Object
Set colListBoxen = Nothing
Set colListBoxen = New Collection
For Each oOleObject In Worksheets("Generator").OLEObjects
If TypeOf oOleObject.Object Is MSForms.Listbox Then
Set clslstBox = New clsListBoxen: Set clslstBox.Listbox = oOleObject.Object
colListBoxen.Add clslstBox
End If
Next
End Sub
Diesem allgemeinen Modul, fügst Du in Zeile 1+2, noch folgendes ein:
Option Explicit
Private colListBoxen As Collection
In ein Klassenmodul schreibst Du dann folgendes:
Option Explicit
Private WithEvents m_ListBox As MSForms.Listbox
Private Sub Class_Initialize()
End Sub
Private Sub Class_Terminate()
Set m_ListBox = Nothing
End Sub
Public Property Get Listbox() As MSForms.Listbox
Set Listbox = m_ListBox
End Property
Public Property Set Listbox(ByRef propertyListbox As MSForms.Listbox)
Set m_ListBox = propertyListbox
End Property
Das Klassenmodul benennst Du im Eigenschaftsexplorer in clsListBoxen um:
Über das Klassenmodull bzw deren Ereignisse, wie bspw das Click-Event(), kannst Du nun rausfinden, welche ListBox
- angeklickt wurde
- verändert wurde usw usf (siehe Bild 1 oben)
|