Hallo Manu,
Ich habe ein ähnliches Problem schon einmal gelöst. Meine Strategie war folgende:
- Du brauchst eine "Datenbank" im Hintergrund, also am besten in einer Excel Tabelle "Tabelle" = ListObject ( Falls du das noch nicht kennst, es gibt viel dazu auf Google). In einer Tabelle muss stehen welche Teile es gibt und in einer anderen welche Hersteller welche Teile bauen. Also einmal nur alle Teile (nur jedes einmal) und einmal für jede Teil-Hersteller Kombination eine Tabellen-Zeile. Tabellen kann man übrigends mit Einfügen->Tabelle Einfügen erstellen und dann im TabellenTab bearbeiten oder benennen.
- Danach brauchst du eine Userform mit zwei ComboBoxen, ich habe keine Erfahrung mit ComboBoxen im Sheet selbst und weiss nicht ob es da auch so klappt, ich sehe aber nicht warum das nicht gehen sollte.
-Dann füllst du die erste Combobox mit folgendem Code:
Private Sub UserForm_Initialize()
Dim tbl As ListObject
Dim cell As Range
Set tbl = ThisWorkbook.Worksheets("TABELLENBLATTNAME").ListObjects("LISTOBJECTNAME-Teile")
For Each cell In tbl.ListColumns(1).DataBodyRange
Userform.ComboBox1.AddItem (cell.Value)
Next cell
End Sub
Diesen Code kannst du in die Userform schreiben. Einfach RechtKlick auf die "UserForm" und "Code Anzeigen" wählen. Damit wird die ComboBox beim starten der Userform gefüllt mit allen Einträgen die in der "Teile"-Tabelle stehen.
- jetzt wirds ein wenig schwieriger. Schreibe ausserhalb jeder Subs oder Funktionen folgendes in deine Userform:
Public EnableEvents As Boolean
Du hast damit deiner Userform eine Eigenschaft EnableEvents zugewiesen, die du benötigst damit folgendes Funktioniert:
- Verwende jetzt das ComboBox_ChangeEvent um die zweite ComboBox jedesmal zu aktualisieren, wenn ein neues Teil ausgewählt wird
Private Sub Filter_Change()
' if the filter changes update the other filter comboboxes
If frmFilter.EnableEvents Then
frmFilter.EnableEvents = False
Call update_filter
frmFilter.EnableEvents = True
End If
End Sub
Sub update_filter()
'Debug.Print "update was fired"
Dim tbl as ListObject
Dim cell as Range
Set tbl = ThisWorkbook.Worksheets("TABELLENBLATTNAME").ListObjects("LISTOBJECTNAME-Hersteller/Teil")
'delete all old items
Do While UserForm.ComboBox2.ListCount > 0
UserForm.ComboBox2.RemoveItem (0)
Loop
For each cell in tbl.ListColumns(1).DataBodyRange If cell.offset(0,1).value=UserForm.ComboBox1.Value then
Userform.ComboBox2.Additem(cell.value) End If
Next cell
End Sub
Beachte hierbei in welcher Spalte der Tabelle das Teil und wo der Lierferant steht. Im Beispiel hier muss das Teil in der Spalte1 und der Hersteller in Spalte2 stehen.
Danach sollte das ganze laufen. Sobald du jetzt ein Teil in ComboBox1 auswählst wird die ComboBox2 gefüllt mit allen Herstellern die das Teil herstellen.
|