Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Von einander abhängige Comboboxen auf einer Userform

Forumthread: Von einander abhängige Comboboxen auf einer Userform

Von einander abhängige Comboboxen auf einer Userform
22.05.2025 12:18:40
ap
Hallo Freunde!
Ich habe hier ein Problemchen… Danke voraus für Eure Aufmerksamkeit. Und noch eine Sache: ich bin kein Profi in Excel, nur ein Hobbybastler.
Also… Ich habe auf einem Tabellenblatt eine intelligente Tabelle mit viele Spalten. 12 davon haben Überschriften von L1 bis L12. Das sind die Spalten für Kategorien und deren Unterkategorien (insgesamt 12 Ebenen).
Das Ziel war in einer Userform die 12 Comboboxen aufzubauen, welche abhängig von einander arbeiten. Das heißt: die Auswahl in der ersten Combobox (Ebene L1) beeinflusst die Inhalte den zweiten Combobox (Ebene L2), so, dass bei der Auswahl in den ersten Combobox die 2.Combobox-Liste aktualisiert wird. Und so weiter und so fort bis zum 12.Combobox. Ähnlich wie beim Datenschnitt einer intelligenten Tabelle.
Leider arbeiten bei mir die Comboboxen unabhängig von einander.
Anderes Problem: so bald ich mit Datenschnitt-buttons die Daten filtere, werden nur eingeblendete Daten (bzw. Zellen) in den Comboboxen abgebildet. Ich brauche aber alle Zellen, unabhängig davon, ob sie sichtbar sind oder nicht.
Ich hoffe, dass Ihr mir helfen können.

https://www.herber.de/bbs/user/177522.xlsm
Anzeige

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 14:20:04
ap
Hammmmer!!! Alles funktioniert! Und der code ist sehr kurz, nicht so wie mein.
Vielen Dank!
Wie schaft man so, dass bei der Eintragnderung einer Combobox, alle darunterliegende geleert werden? Sonst entsteht so eine Situation, wo obenliegende Kategorie geändert wurde, aber dadrunter liegende Boxen haben noch die alte Einträge (von vorherige Kategorie). Das täuscht etwa.
Danke voraus!
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 14:50:49
Alwin Weisangler
sorry da war noch eine kleine Ungereimtheit drin.

Ändere die Klasse so:


Option Explicit
Public WithEvents Combobox As MSForms.Combobox

Private Sub Combobox_Change()
Dim oDic As Object, i&, Z As Range, nextSp: nextSp = "L" & Replace(Combobox.Name, "cbo_L", "") + 1
Set oDic = CreateObject("Scripting.Dictionary")
For i = CDbl(Replace(nextSp, "L", "")) To 12
With Combobox.Parent.Controls("cbo_L" & i)
.Clear
.Value = ""
End With
Next i
For Each Z In Tabelle1.Range("tblElements[" & nextSp & "]")
If InStr(1, Z, Combobox, vbTextCompare) > 0 Then
oDic(Z.Text) = 0
End If
Next
Combobox.Parent.Controls("cbo_" & nextSp).List = oDic.keys
End Sub
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 15:27:07
ap
Ja! Alles funktioniert!
Darf ich nach letzten Wunsch nachfragen?
Ist es möglich die Comboboxen kaskadenweise während der Eingabe Einzublenden. Z.B. beim Öffnen der Maske erscheint erster Box, andere sind ausgeblendet. Wenn in estem Box ein Eintrag ausgewählt/vorhanden ist, erscheint nächste Box, usw. Ist es Schwer so zu optimieren?
Danke vielmals!
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 15:41:18
Alwin Weisangler
Hallo,

das ist doch ganz einfach. Setze außer cbo_L1 alle weiteren Comboboxen im Eigenschaftsfenster auf .Visible = False und ändere den Code in der Klasse so:


Option Explicit
Public WithEvents Combobox As MSForms.Combobox

Private Sub Combobox_Change()
Dim oDic As Object, i&, Z As Range, nextSp: nextSp = "L" & Replace(Combobox.Name, "cbo_L", "") + 1
Set oDic = CreateObject("Scripting.Dictionary")
For i = CDbl(Replace(nextSp, "L", "")) To 12
With Combobox.Parent.Controls("cbo_L" & i)
.Clear
.Value = ""
.Visible = False
End With
Next i
For Each Z In Tabelle1.Range("tblElements[" & nextSp & "]")
If InStr(1, Z, Combobox, vbTextCompare) > 0 Then
oDic(Z.Text) = 0
End If
Next
With Combobox.Parent.Controls("cbo_" & nextSp)
.List = oDic.keys
.Visible = True
End With
End Sub


Gruß Uwe
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 15:53:25
ap
Super! Echt Respekt! Dafür hätte ich vieeel länger gebraucht.
Ich bedanke mich bei Dir, Uwe!

Jetzt kann man im Prinzip diese Anfrage schlißen. Mache ich das, oder machen es die Admins?
AW: Von einander abhängige Comboboxen auf einer Userform
22.05.2025 16:02:34
Alwin Weisangler
Hallo,

So wie ich es sehe ist der Thread schon als geschlossen gekennzeichnet. Da gibt es unter Antwort auf Beitrag erstellen ein Kästchen "Frage noch offen".
Wenn du da keinen Haken reinsetzt wird der Thread als geschlossen gekennzeichnet.
Es kann aber durchaus sein, dass andere Helfer trotzdem noch eigene Beiträge mit ihren jeweiligen Lösungsvorschlägen schreiben.

Gruß Uwe
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 13:54:46
ap
Kann ich noch eine Frage Stellen, bzw. eine Bitte meine Datei zu überprüfen. Die Datei von gestern hat prima funktioniert. Heute habe ich versucht den Code aus Forum von gestern in meine "Arbeitsdatei" zu übertragen. Im Code habe ich nichts geändert, ausser Tabellennamen. Statt "Tabelle1" und "tblElements" (wie in der Code aus Forum) habe ich die Namen wie follgt erstetzt: "EquipmentPlan" und "tblElemente". Ich bekomme ein Fehlermeldung ("Variable nicht definiert"). Wo liegt das Problem?
Ich bedanke mich voraus für die Hilfe. Grüße Aleksei.
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 14:36:20
ap
Wahrscheinlich sollte ich voher das Kästchen "Farge noch offen" aktivieren... Noch vor meiner Frage.

Kann ich noch eine Frage Stellen, bzw. eine Bitte meine Datei zu überprüfen. Die Datei von gestern hat prima funktioniert. Heute habe ich versucht den Code aus Forum von gestern in meine "Arbeitsdatei" zu übertragen. Im Code habe ich nichts geändert, ausser Tabellennamen. Statt "Tabelle1" und "tblElements" (wie in der Code aus Forum) habe ich die Namen wie follgt erstetzt: "EquipmentPlan" und "tblElemente". Ich bekomme ein Fehlermeldung ("Variable nicht definiert"). Wo liegt das Problem?
Ich bedanke mich voraus für die Hilfe. Grüße Aleksei.

https://www.herber.de/bbs/user/177521.xlsm
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 14:51:13
Alwin Weisangler
Hallo Aleksei,

Um dir weiterzuhelfen braucht es eine genauere Fehlerbeschreibung. Am besten ist es eine anonymisierte Kopie die Arbeitsdatei mit hochzuladen, wo ersichtlich ist, wie welche Zusammenhänge ausgewertet werden müssen.

Ich habe mal noch auf die Schnelle eine etwas tolerantere Variante zusammengestellt. Vielleicht reicht das ja schon.
Anbei mit Listobjekt Name: tblElemente und Modulname des Tabellenblattes: EquipmentPlan
https://www.herber.de/bbs/user/177545.xlsm

Zur Ergänzung: Tabelle1 ist der Modulname des Tabellenblattes und nicht der Tab-Name.
Beim Einbau in die produktive Datei muss auch der Modulname des Klassenmoduls so wie in der Beispieldatei lauten.

Gruß Uwe


Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 16:11:38
ap
Danke Uwe,

für Hinweis und andere Variante von Code. Ich muss es ... eher am Wochenende ausprobiren. Auf der Schnelle... Die abgspeckte "Arbeitsdatei", welcer ich heute hochgeladen habe, nach von dir empfolene Korrekturen funktioniert. In richtige Arbeitsdatei, wo viele andere Steuerelemente und Codes vorhanden sind, kommt es zur Fehlermeldung. Wahrscheinlich, das ist das, was du gemeint hast, die Zusammenhänge. Vielleicht gibt es schon eine Variablle mit gleichem Namen (wenn meine Vermutung richtig ist). Die einige Teile des ganzen Codes stammen (leider) nicht aus meinem Kopf, sondern aus Interner rausgeholt worden und an meinen Bedürflissen adaptiert.

Was meinst du mit "eine anonymisierte Kopie"? Meinst du dabei gesperrte sensibele Infos in der Tabelle oder etwas anderes?

Danke Uwe.
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 16:18:02
ap
Die einige Teile des ganzen Codes stammen (leider) nicht aus meinem Kopf, sondern aus dem Internet rausgeholt worden und an meinen Bedürfnisse adaptiert. (sorry für die Garammatikfehler )
AW: Von einander abhängige Comboboxen auf einer Userform
23.05.2025 16:34:11
Alwin Weisangler
Hallo Aleksei,

Anonymisiert heißt einfach nur, dass keine persönlichen Daten real existierender Personen durch das Hochladen der Öffentlichkeit preisgegeben werden. Genau so trifft dies auch auf Betriebsgeheimnisse zu.

Ansonsten sollte sich aus den in der Datei vorhandenen Beispieldatensätzen in Verbindung mit der beschriebenen Zielstellung erkennen lassen, wie man sinnvolle Hilfe leisten kann.

Gruß Uwe
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
24.05.2025 12:32:47
Alwin Weisangler
Hallo Aleksei,

ich habe jetzt mal noch die 2. Variante (2 spaltige Comboboxen) auf einspaltig umgestellt.
So ist es überschaubarer (weniger Code) und es braucht nur minimale Fehlerbehandlung.

Die Public Event Variable habe ich aus Stabilitätsgründen in eine Property Anweisung gepackt.
Der Grund dafür ist, wenn irgendwo in deinem Projekt durch einen Fehler die Public Variable entladen wird (das passiert bei einem Fehler), wird die Klasse nicht mehr sein Werk verrichten.
Die Property Anweisung kann so lang wie die Kompilierung nicht abgebrochen wird ihren Wert behalten, da diese sich mit jedem Zugriff den Wert aus der privaten Variable holt.

Da ein Zugriff auf dieses Event von außerhalb nicht benötigt wird habe ich die Get Anweisung nicht eingetragen.
Falls dies erforderlich werden sollte wäre dies noch nachträglich so ins Klassenmodul einzutragen:


Property Get Combobox() As MSForms.Combobox
Set Combobox = m_Combobox
End Property

https://www.herber.de/bbs/user/177551.xlsm

Gruß Uwe
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
26.05.2025 12:55:08
ap
Hallo Uwe,
dein letzte code nach der Integrierung in die Arbeitsdatei hat fehlerfrei funktioniert. Auch mit anderen Comboboxen (sieh weiter).

Ich habe am WE die Ursache der Fehlermeldung der vorletzten Version des Codes herausgefunden.
Das lag darin, dass auf der Userform die anderen Comboboxen waren. Aber wie ich schon oben erwähnt habe, dein letzter Code hat dieses Problem schon gelöst. Danke dir!

Jetz habe ich eine von mir leider nicht vorsehbare Sache entdeckt. Das habe ich von vorne an nicht erwähnt. Mein Fehler!
Und zwar der Sinn der ganzen Bewegung ist natürlich die Daten, bzw. Kategorien/Unterkategorien, aus der Tabelle nicht nur auszulesen, sondern auch Möglichkeit haben die Daten in Userform zu korrigieren und in die Tabelle zurück zu übertragen. Das kann man über ein „Speichern“ Button zu organisieren. Das ist kein Werk das kriege ich selbst hin (Finger gekreuzt).

In der aktuellen Dateiversion (177551.xlsm) beobachte ich einige Phänomene.

1. Nehmen wir an ich möchte zu den 2 existierenden L1-Kategorien eine dritte „Kategorie 3“ hinzufügen. Ich würde dann die schon im 1.Combobox (cbo_L1) stehende Bezeichnung löschen, neue Bezeichnung eintippen und auf speichern gehen.
Aber im Fall wenn ich direkt die L2-(Unter)Kategorie eingeben möchte, habe ich kein Combobox darunter.

2. Wenn die letzte Unterkategorie gewählt wird… und sie ist wirklich die letzte für die Kategorie des L1-Levels, dann erscheint kein weiteren Combobox unterhalb, so dass ich von Hand keine weitere Unterkategorie eingeben kann.
(Kategorie 2 > Kategorie 2.1 > Kategorie 2.1.1 > Kategorie 2.1.1.1 (die Letzte Eintrag)).

Wäre es möglich, dass nach zuletzt ausgefülltem Combobox (auch per Hand) immer ein weiteren Combobox nach unten eingeblendet wird? Und wenn neue Kategorie von Hand eingegeben wird, alle darunter liegende Boxen geleert werden?
Ich verstehe, die Aufgabenstellung wird komplexer und komplexer. Dieses Problem kann ich selbst leider nicht lösen.
Wäre die Korrektur noch möglich?
Danke voraus
Aleksei.
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
26.05.2025 13:00:06
ap
Hier ist die Fehlermeldung, wo die anderen Comboboxen auf der Userform vorhanden waren.
Userbild
Userbild
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
26.05.2025 14:31:41
Alwin Weisangler
Hallo Aleksei,

um die 1. leere Combobox sichtbar zu bekommen, musst du nur in der Klasse die Zeile 25:
If oDic.Count > 0 Then .Visible = True
in:
.Visible = True
ändern.

Gruß Uwe
AW: Von einander abhängige Comboboxen auf einer Userform
26.05.2025 14:58:46
ap
Hallo Uwe,
funktioniert, auch in der Arbeitsdatei! So ist es genau, wie ich mir vorgestelltt habe.
Danke für deine großartige Hilfe!
Grüße Aleksei
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
26.05.2025 14:59:54
Alwin Weisangler
Gerne!

Gruß Uwe
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 11:25:23
ap
Hallo Uwe,
ich habe mit einem unerwarteten Ereignis in letztem Code zusammengestoßen.

Bei der Eingabe nn der Beispieldatei aus dem Forum in den 12.Combobox tritt ein Fehler auf:
Userbild
Userbild
https://www.herber.de/bbs/user/177597.xlsm

Und in der Arbeitsdatei schon beim 9.Combobox:
Userbild
Userbild
https://www.herber.de/bbs/user/177600.xlsm

Hast du eine Idee woran es liegen könnte?
Danke voraus und Gruß
Aleksei
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 12:25:16
Alwin Weisangler
Hallo Aleksei,

ja der Fehler muss da passieren, weil es keine 13. Combobox gibt.

Den Fehler kannst du so auffangen:


Private Sub m_Combobox_Change()
Dim i&, z As Range, oDic As Object, pSp$, secCbo$
secCbo = "cbo_L" & Replace(m_Combobox.Name, "cbo_L", "") + 1
pSp = Replace(m_Combobox.Name, "cbo_", "")
Set oDic = CreateObject("Scripting.Dictionary")
For i = Replace(m_Combobox.Name, "cbo_L", "") + 1 To 12
With m_Combobox.Parent.Controls("cbo_L" & i)
.Clear
.Value = ""
.Visible = False
End With
Next i
For Each z In EquipmentPlan.Range("tblElemente[" & pSp & "]")
If z.Value = m_Combobox.Value And z.Offset(, 1).Value > "" Then oDic(z.Offset(, 1).Value) = 0
Next
If pSp = "L12" Then Exit Sub ' Fehlerbehandlung wenn die 12. Combobox ein Change Ereignis auslöst
With m_Combobox.Parent.Controls(secCbo)
.List = oDic.keys
.Visible = True
End With
End Sub
Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 12:34:19
Alwin Weisangler
Zur Ergänzung:

Was da in deiner Arbeitsdatei nicht klappt kann ich nur vermuten.
Schau die mal die Namen der Comboboxen nach der 7. Combobox an.
Ich vermute einen Schreibfehler entweder im Comboboxnamen oder im Spaltennamen des Listobjekts.

Gruß Uwe
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 13:51:37
ap
Hallo Uwe,

danke für deine schnelle Antwort.
Ich habe die beiden Deieten getestet.
Bei der Datei 177597.xlsm hat es prima funktioniert.
Bei der Datei 177600.xlsm (nämlich abgespeckte Arbeitsdatei), hat es nicht funktioniert, obwohl die Codes in den beiden Dateien identisch sind.
Ich begreife es nicht. Ich hänge die zweite Datei + Screenshots an.

Danke vielmals.
Grüße
Aleksei

https://www.herber.de/bbs/user/177606.xlsm

Userbild

Userbild

Anzeige
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 14:25:36
Alwin Weisangler
Hallo Aleksei,

wenn du den Zeilenumbruch im Header des Listobjekts ab L10 entfernst funktioniert die Klasse normal und es braucht keine Änderung am Code.

Gruß Uwe
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 14:36:51
ap
Ich bin schwer beindruckt!
Funktioniert!)
Herzlichen Dank!
Aleksei
AW: Von einander abhängige Comboboxen auf einer Userform
28.05.2025 14:45:48
Alwin Weisangler
Ich hatte dich ja schon zuvor darauf hingewiesen, dass du mal die Headernamen überprüfen sollst.

Gruß Uwe
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18