Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zwei voneinander abhängige ComboBoxen

Zwei voneinander abhängige ComboBoxen
01.06.2016 11:57:40
Johannes
Hallo Miteinander,
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.
Userbild
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
Userbild
Ich hoffe ich konnte helfen :)
Grüße

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei voneinander abhängige ComboBoxen
01.06.2016 13:02:01
Rudi
Hallo,
das geht viel einfacher ohne Schleifen.
Private Sub UserForm_Initialize()
'Hauptprojekt
With Sheets("Tabelle2")
Me.ComboBoxHauptprojekt.List = .Range(.Cells(1, 1), .Cells(1, Columns.Count).End(xlToLeft)). _
Value
End With
End Sub
Private Sub ComboBoxHauptprojekt_Change()
Dim lngColumn As Long
ComboBoxNebenprojekt.Clear
If ComboBoxHauptprojekt.ListIndex > -1 Then
With Sheets("Tabelle2")
lngColumn = Application.Match(ComboBoxHauptprojekt, .Rows(1), 0)
ComboBoxNebenprojekt.List = .Range(.Cells(2, lngColumn), .Cells(Rows.Count, lngColumn). _
End(xlUp)).Value
End With
End If
End Sub

Gruß
Rudi

Anzeige
AW: Zwei voneinander abhängige ComboBoxen
01.06.2016 13:10:14
Johannes
Hi Rudi,
Tatsache! Etwas Schreibarbeit gespart!
Merci für die Rückmeldung!
Grüße
Johannes
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Abhängige ComboBoxen in Excel erstellen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen:

    • Öffne Excel und gehe zum VBA-Editor (ALT + F11).
    • Erstelle eine neue Userform, indem du mit der rechten Maustaste auf das Projekt klickst und "UserForm einfügen" wählst.
  2. ComboBoxen hinzufügen:

    • Ziehe zwei ComboBox-Steuerelemente auf die Userform. Benenne sie ComboBoxHauptprojekt und ComboBoxNebenprojekt.
  3. Datenquelle vorbereiten:

    • Stelle sicher, dass deine Daten in Tabelle2 organisiert sind, wobei die Hauptprojekte in der ersten Zeile und die entsprechenden Nebenprojekte darunter stehen.
  4. VBA-Code einfügen:

    • Füge den folgenden Code in die Userform ein:
    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
  5. Userform testen:

    • Starte die Userform und teste die Funktionalität. Wähle ein Hauptprojekt aus und überprüfe, ob die zugehörigen Nebenprojekte korrekt in der zweiten ComboBox angezeigt werden.

Häufige Fehler und Lösungen

  • Fehler: ComboBox bleibt leer:

    • Überprüfe, ob die Daten in Tabelle2 korrekt angeordnet sind. Stelle sicher, dass die ersten Zeilen die Hauptprojekte und die darunterstehenden Zeilen die Nebenprojekte enthalten.
  • Fehler: Laufzeitfehler:

    • Achte darauf, dass die ComboBoxen korrekt benannt sind und die Userform initialisiert wird, bevor du versuchst, sie zu verwenden.

Alternative Methoden

Rudi hat eine einfachere Methode vorgeschlagen, die ohne Schleifen auskommt. Hier ist der Code:

Private Sub UserForm_Initialize()
    ' Hauptprojekt
    With Sheets("Tabelle2")
        Me.ComboBoxHauptprojekt.List = .Range(.Cells(1, 1), .Cells(1, Columns.Count).End(xlToLeft)).Value
    End With
End Sub

Private Sub ComboBoxHauptprojekt_Change()
    Dim lngColumn As Long
    ComboBoxNebenprojekt.Clear
    If ComboBoxHauptprojekt.ListIndex > -1 Then
        With Sheets("Tabelle2")
            lngColumn = Application.Match(ComboBoxHauptprojekt, .Rows(1), 0)
            ComboBoxNebenprojekt.List = .Range(.Cells(2, lngColumn), .Cells(Rows.Count, lngColumn).End(xlUp)).Value
        End With
    End If
End Sub

Diese Methode ist effizienter und reduziert die benötigte Schreibarbeit.


Praktische Beispiele

Angenommen, du hast folgende Daten in Tabelle2:

Hauptprojekt Nebenprojekt 1 Nebenprojekt 2
Projekt A Aufgabe 1 Aufgabe 2
Projekt B Aufgabe 3 Aufgabe 4

Wenn du „Projekt A“ in der ersten ComboBox auswählst, sollten „Aufgabe 1“ und „Aufgabe 2“ in der zweiten ComboBox erscheinen.


Tipps für Profis

  • Dynamische Datenquellen: Überlege, die Datenquelle für die ComboBoxen dynamisch zu gestalten, indem du die Anzahl der Hauptprojekte und Nebenprojekte automatisch erkennst, um die Wartung zu erleichtern.
  • Styling der Userform: Nutze die Eigenschaften der Userform, um ein ansprechendes Design zu kreieren, das auch die Benutzererfahrung verbessert.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die ComboBoxen mit einer Datenbank verbinden?
Antwort: Du kannst ADO oder DAO verwenden, um Daten aus einer Datenbank direkt in die ComboBoxen zu laden.

2. Frage
Kann ich die Userform auch in Excel Online verwenden?
Antwort: Nein, VBA-Userforms sind nur in der Desktop-Version von Excel verfügbar.

3. Frage
Wie kann ich die Auswahl der ComboBoxen speichern?
Antwort: Du kannst die ausgewählten Werte in eine Zelle schreiben oder in eine andere Datenstruktur speichern, um sie später abzurufen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige