im Folgenden zeige ich euch meinen Code, der zwei ComboBoxen voneinander abhängig befüllt:
Das ganze geschieht auf einer Userform.
Folgendes Szenario: Man hat mehrere sog. Hauptprojekte mit dazugehörigen Nebenprojekten, die man von einander abhängig auswählen möchte, um diese in ein separates Tabellenblatt einzutragen. (Um beispielsweise Bearbeitungsvorgänge o.ä. festzuhalten).
Nice to have: Die ComboBoxen sind dynamisch! :)
Hierzu habe ich ein Bild: Die orange hinterlegten Zellen seien die Hauptprojekte, die darunterliegenden sind die Nebenprojekte.
Beim Starten der Userform befülle ich zunächst die ComboBoxHauptprojekte mit den Überschriften. Dazu lese ich die Anzahl der Überschriften aus, lese die Überschrift ein und übertrage sie in die ComboBox als Dropdown.
In einer separaten Prozedur, bei eine Veränderung in ComboBoxHauptprojekte stattfindet, befülle ich davon abhängig die ComboboxNebenprojekte.
Vergleiche dazu das Hauptprojekt und lese dann die darunterstehenden Nebenprojekte ein und füge sie der ComboboxNebenprojekte als Dropdown zu.
Einfach mal in die Syntax einlesen: Ist meiner Meinung nach der einfachste übersichtlichste Weg.
-------------Code beginnt hier------------
Private Sub UserForm_Initialize()
Dim lngRechtesterEintrag As Long
Dim i As Integer
'Hauptprojekt
lngRechtesterEintrag =Sheets("Tabelle2").Cells(1,Columns.Count).End(xlToLeft).Column
With Me.ComboBoxHauptprojekt
For i = 1 To lngRechtesterEintrag
Eintrag = Sheets("Tabelle2").Cells(1, i).Value
.AddItem CStr(Eintrag)
Next
End With
End Sub
Private Sub ComboBoxHauptprojekt_Change()
ComboBoxNebenprojekt.Clear
lngRechtesterEintrag = Sheets("Tabelle2").Cells(1, Columns.Count).End(xlToLeft).Column
If ComboBoxHauptprojekt.ListIndex = -1 Then Exit Sub
For i = 1 To lngRechtesterEintrag
Eintrag = Sheets("Tabelle2").Cells(1, i).Value
If ComboBoxHauptprojekt = Eintrag Then
ZeileMax = Sheets("Tabelle2").Cells(Rows.Count, i).End(xlUp).Row
For n = 2 To ZeileMax
nebenprojekt = Sheets("Tabelle2").Cells(n, i)
ComboBoxNebenprojekt.AddItem CStr(nebenprojekt)
Next
End If
Next
End Sub
-------------------------Code endet hier--------------------------
Im Bild
Ich hoffe ich konnte helfen :)
Grüße