Clever-Excel-Forum

Normale Version: Abhängige Comboboxen/Listboxen - Filterfunktion
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, 

ich habe anbei meine Tabelle angefügt bei welcher ich leider nicht mehr weiterkomme. 
Es geht darum, dass die ComboBox1 die in der Projektliste aufgeführten Projekte aufführt und je nach Auswahl die ListBox1 die davon abhängigen Einträge aus der DatenbankMaterial anzeigt. 
Quasi eine Filterfunktion der Listbox1 in Abhängigkeit von der ComboBox1.

Ich würde mich sehr über eine einfache Lösung freuen.

Beste Grüße
Hallo Otto,

schau mal, ob die Änderungen bereits zum Ziel führen.
Nach einer Änderung in der Combobox wird die Listbox neu gefüllt und hierbei nach dem jeweiligen Eintrag in der Combobox gefiltert.
Ob woanders jetzt noch was anzupassen ist, habe ich nicht geprüft. Probiere es halt mal aus.

Code:

Private Sub ComboBox1_Change()
  Call LIST_LADEN_UND_INITIALISIEREN
End Sub

Private Sub LIST_LADEN_UND_INITIALISIEREN()
  Dim lZeile As Long, lOutZeile As Long
  Dim lZeileMaximum As Long
  Dim i As Integer
  
  Call ComboBox1_Initialize
  

    'Alle TextBoxen leer machen
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        Me.Controls("TextBox" & i) = ""
    Next i

    ListBox1.Clear 'Liste leeren
    
    '4 Spalten einrichten
    'Spalte 1: Zeilennummer des Datensatzes
    'Spalte 2: Spalte A)
    'Spalte 3: (Spalte B)
    'Spalte 4: (Spalte C)
    ListBox1.ColumnCount = 5
    
    'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
    '"<Breite Spalte 1>;<Breite Spalte 2>;<Breite Spalte 3>;<Breite Spalte 4>"
    ListBox1.ColumnWidths = "0;;;"
    'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
    
    'Um eine Schleife fŸr alle DatensŠtze zu erhalten benštigen wir die letzte verwendete Zeile
    lZeileMaximum = Tabelle12.UsedRange.Rows.Count 'Benutzer Bereich auslesen
    
    
    For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
        
        'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
        If IST_ZEILE_LEER(lZeile) = False Then
            
            'Spalte 1 der Liste mit der Zeilennummer fŸllen
           If CStr(Tabelle12.Cells(lZeile, 5).Text) = ComboBox1.Value Then
              ListBox1.AddItem lZeile

            'Spalten 2 bis 4 der Liste fŸllen
              ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle12.Cells(lZeile, 1).Text)
              ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle12.Cells(lZeile, 2).Text)
              ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle12.Cells(lZeile, 3).Text)
              ListBox1.List(ListBox1.ListCount - 1, 4) = CStr(Tabelle12.Cells(lZeile, 4).Text)
            End If
            
        End If
        
    Next lZeile
    
End Sub

______________________
viele Grüße aus Freigericht
Karl-Heinz
Moin Volti, 

TAUSEND DANK. Das war gar nicht so schwer! Funktioniert super.

Noch eine doofe Frage, die ich noch nicht gelöst bekommen haben. Wie bekomme ich die Zeile 1 als Überschrift in die ListBox?

Besten Dank!
Hallo Otto,

ich habe Listboxen noch so gut wie nie benutzt, aber soweit ich weiß, wird das Setzen der Kopfzeilen in der Listbox per VBA nicht unterstützt wird.

Das klappt nur mit .RowSource-Range (Bereichszuweisung). Dann aber wiederum kannst Du nicht mehr die Items per VBA dort reinbringen.

Wenn Du es unbedingt brauchst, könntest Du ja über der Listbox entsprechende Textfelder positionieren und beschriften lassen oder einfach die erste Zeile so mit einlesen.....

Aber vielleicht hat ja irgendjemand noch die passende Lösung dazu.

viele Grüße
Karl-Heinz