Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

VBA - Listbox in Abhängigkeit füllen


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