'=== Diese Arbeitsmappe: === Private Sub Workbook_Open() UserForm1.Show End Sub '=== UserForm1: === Private Sub userform_initialize() Set cbo1 = UserForm1.ComboBox1 'Gruppe Set cbo2 = UserForm1.ComboBox2 'Detail Set cbo3 = UserForm1.ComboBox3 'Hersteller cbo1.Clear 'Beim Aufruf der UserForm müssen ALLE cbos 1x gefüllt werden: Application.Run "cboxfuellen", 1 'Ersten Wert anzeigen (anstelle einer leeren Box): cbo1.ListIndex = 0 '(Hierdurch wird das Ereignis 'Combobox1_Change()' aufgerufen ' und die zweite Box gefüllt usw. End Sub 'Anmerkung: Das *_Change-Ereignis ist nicht opitimal gewählt, da bei ' Änderung von cbo1 JEDESMAL auch cbo2 UND cbo3 geändert werden. cbo3 ' wird erneut gefüllt, wenn cbo2 geändert wird usw. Die sub cboXfuellen ' läuft also sehr häufig im Hintergrund mit; die Performance ist dadurch ' nicht "perfekt" (dürfte allerdings kaum auffallen). Private Sub ComboBox1_Change() cbo2.Clear 'Beim Ändern von cbo1 muß die zweite Box neu gefüllt werden: Application.Run "cboxfuellen", 2 'Ersten Wert anzeigen (anstelle einer leeren Box): cbo2.ListIndex = 0 End Sub Private Sub ComboBox2_Change() cbo3.Clear 'Beim Ändern von cbo2 muß die dritte Box neu gefüllt werden: Application.Run "cboxfuellen", 3 'Ersten Wert anzeigen (anstelle einer leeren Box): cbo3.ListIndex = 0 End Sub Private Sub CommandButton1_Click() UserForm1.Hide 'unsichtbar (aber noch verfügbar, folglich Speicherplatz fressend!) 'mach was, nachdem der User die Werte festgelegt hat: MsgBox cbo1.Value & " - " & cbo2.Value & " - " & cbo3.Value 'Aufräumen / Speicherplatz freigeben: Unload UserForm1 Set cbo1 = Nothing Set cbo2 = Nothing Set cbo3 = Nothing End Sub '=== Modul: === Public cbo1 As ComboBox 'Gruppe Public cbo2 As ComboBox 'Detail Public cbo3 As ComboBox 'Hersteller Private Sub cboXfuellen(cboX As Integer) 'Füllt die Combobox "X" mit Werten Select Case cboX Case 1 'erste Combobox ("Gruppe") füllen: With cbo1 .AddItem "Elektrik" .AddItem "Hydraulik" .AddItem "Steuerung" End With Case 2 'zweite Combobox ("Detail") füllen... With cbo2 Select Case cbo1.Value '... in Abhängigkeit von cbo1 ("Gruppe"): '#### Details Elektrik ##### Case "Elektrik" .AddItem "Sensor" .AddItem "Schalter" '#### Details Hydraulik ##### Case "Hydraulik" .AddItem "Pumpe" .AddItem "Ventil" '#### Details Steuerung ##### Case "Steuerung" .AddItem "SPS" .AddItem "Bus-Leitung" Case Else .AddItem "Bitte zuerst Gruppe wählen..." End Select End With Case 3 'dritte Combobox ("Hersteller") füllen... With cbo3 Select Case cbo2.Value '... in Abhängigkeit von cbo2 ("Detail"): '#### Hersteller Elektrik ##### Case "Sensor" .AddItem "Hersteller Sensor 1" .AddItem "Hersteller Sensor 2" .AddItem "Hersteller Sensor 3" Case "Schalter" .AddItem "Hersteller Schalter 1" .AddItem "Hersteller Schalter 2" .AddItem "Hersteller Schalter 3" '#### Hersteller Hydraulik ##### Case "Pumpe" .AddItem "Hersteller Pumpe 1" .AddItem "Hersteller Pumpe 2" .AddItem "Hersteller Pumpe 3" Case "Ventil" .AddItem "Hersteller Ventil 1" .AddItem "Hersteller Ventil 2" .AddItem "Hersteller Ventil 3" '#### Hersteller Steuerung ##### Case "SPS" .AddItem "Hersteller SPS 1" .AddItem "Hersteller SPS 2" .AddItem "Hersteller SPS 3" Case "Bus-Leitung" .AddItem "Hersteller Bus-Leitung 1" .AddItem "Hersteller Bus-Leitung 2" .AddItem "Hersteller Bus-Leitung 3" Case Else .AddItem "Bitte zuerst Detail wählen..." End Select End With Case Else: MsgBox "Unerwarteter Fehler in 'cboXfuellen'", vbOKOnly + vbCritical, "Fehler" End Select End Sub