Herbers Excel-Forum - das Archiv

VBA - Listbox in Abhängigkeit füllen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox UserForm


Betrifft: VBA - Listbox in Abhängigkeit füllen
von: Lucas H

Geschrieben am: 18.09.2019 19:31:54
Guten Abend Zusammen,
nach einiger Zeit musste ich mich einfach registrieren, da ich mit nachlesen und probieren einfach nicht zum Ziel komme. Also vorab schon einmal Danke für den bisherigen Input durch euch!
Zum Thema:
Ich versuche eine Maske aus Listboxen zu bauen, welche voneinander abhängig sind. Leider kann ich die mir vorliegende Tabelle nicht filtern.
1. Schritt
Ich habe in der ersten Liste meine Städte sortiert eingefügt bekommen und Duplikate ausgeschlossen mit folgendem Code:
Private Sub UserForm_Initialize()
Dim objDic As Object
Dim lngZ As Long
Set objDic = CreateObject("Scripting.Dictionary")
For lngZ = 4 To Sheets("Kundenliste (2)").Cells(Rows.Count, 12).End(xlUp).Row
objDic(Cells(lngZ, 12).Value) = 0
Next
Me.BoxOrt.List = objDic.keys
Dim iLast As Integer, iNext As Integer
Dim iTmp
With BoxOrt
For iLast = 0 To .ListCount - 1
For iNext = iLast + 1 To .ListCount - 1
If .List(iLast) > .List(iNext) Then
iTmp = .List(iLast)
.List(iLast) = .List(iNext)
.List(iNext) = iTmp
End If
Next iNext
Next iLast
End With
End Sub
2. Schritt.
Ist die möglichen Straßen zum ausgewählten Ort sortiert anzeigen zu lassen. Ich scheitere derzeit daran die Spalte 12 (Orte) zu filtern und alle passenden Straßen (Spalte 9) in der 2 Liste sortiert anzeigen zu lassen.
Ich hoffe Ihr könnt mir helfen und wünsche vorerst einen schönen Abend.

Betrifft: AW: VBA - Listbox in Abhängigkeit füllen
von: 1713762.html

Geschrieben am: 18.09.2019 22:49:08
Moin!
Also am einfachsten wäre wirklich, den Autofilter zu nutzen. Da das wie geschriebe wohl ausscheidet, musst du halt "manuell" die Liste filtern. Also von der ersten bis zur letzten beschriebenen Zeile durchgehen. Schauen, ob in Spalte 12 dein gewünschter Ort steht und wenn ja die Straße zu einem Dictionary hinzufügen. Am Ende die keys wieder an die zweite LIste und diese wie beim ersten Mal sortieren lassen. Also fast identisch wie dein erster Code, außer dass du am Anfang noch eine If then PRüfung reinbaust.
Da du Teile des Codes dann zweimal hast, wäre es ggf. sinnvoll, den sortieren Teil in eine Funktion auszulagern. Von der lässt du dir die sortierte Liste zurückgeben.
VG

Betrifft: AW: VBA - Listbox in Abhängigkeit füllen
von: 1713934.html

Geschrieben am: 19.09.2019 15:21:29
Hallo Matthias,
danke für deinen Vorschlag. Mein Gedanke sah dahingehend wie folgt aus:
Private Sub BoxOrt_Change()
Dim objDic As Object
Dim lngZ As Long
Dim iLast As Integer, iNext As Integer
Dim iTmp
Set objDic = CreateObject("Scripting.Dictionary")
BoxStrasse.Clear
Sheets("Kundenliste (2)").Activate
If Sheets("Kundenliste (2)").Cells(Rows.Count, 12).End(xlUp).Row = BoxOrt.Value Then
For lngZ = 4 To Sheets("Kundenliste (2)").Cells(Rows.Count, 9).End(xlUp).Row
objDic(Cells(lngZ, 9).Value) = 0
Next
Me.BoxStrasse.List = objDic.keys
With BoxStrasse
For iLast = 0 To .ListCount - 1
For iNext = iLast + 1 To .ListCount - 1
If .List(iLast) > .List(iNext) Then
iTmp = .List(iLast)
.List(iLast) = .List(iNext)
.List(iNext) = iTmp
End If
Next iNext
Next iLast
End With
On Error Resume Next
Else
End If
End Sub
Leider funktioniert es so aber nicht. Hast du ggf. einen besseren Vorschlag?
Grüße

Betrifft: AW: VBA - Listbox in Abhängigkeit füllen
von: 1713946.html
Geschrieben am: 19.09.2019 17:25:24
SO benutzt man Dictionaries:
https://excelmacromastery.com/vba-dictionary/

Betrifft: AW: VBA - Listbox in Abhängigkeit füllen
von: 1713971.html
Geschrieben am: 19.09.2019 20:00:10
Moin!
Nein, den Anfang mit dem Abgleich meinte ich anders. Du solltest durch alle Zeilen gehen und dort Spalte 12 mit demORt vergelichen. WEnn dass stimmt, die Straße (Spalte 9 ) hinzufügen.
Sollte in etwa so aussehen:

Sheets("Kundenliste (2)").Activate
For lngZ = 4 To Sheets("Kundenliste (2)").Cells(Rows.Count, 12).End(xlUp).Row
If Sheets("Kundenliste (2)").Cells(lngZ, 12) = BoxOrt.Value Then
objDic(Sheets("Kundenliste (2)").Cells(lngZ, 9).Value) = 0
End If
Next
Me.BoxStrasse.List = objDic.keys

VG
Excel-Beispiele zum Thema "VBA - Listbox in Abhängigkeit füllen"
Mehrfachauswahl aus ListBox auslesen Gefilterte Daten in eine ListBox einlesen
Dateien aus Listbox auslesen und öffnen Listbox-Eintrag durch Mausbewegung markieren
ListBox-Einträge auswechseln Horizontal angeordnete Elemente in eine ListBox übernehmen
Tabellenblattnamen in eine ListBox einlesen ListBox bei Eintrag erweitern
Makros in Abhängigkeit vom Zellennamen aufrufen Markieren in Abhängigkeit vom Quartal
Bewerten Sie hier bitte das Excel-Portal