AW: Autofilter mit ListBox verknüpfen
28.12.2023 16:18:48
Alwin Weisangler
Hallo Thomas,
wenn es nur um das Füllen einer Listbox mit gefilterten Zeilen aus einem Listobject geht, kann man das nebst Filter so machen:
Option Explicit
Private Sub TextBox1_Change()
Dim i&, j&, arrWerte(), arr As Variant, objCell As Range
If ComboBox1.ListIndex > -1 Then
arr = Split(TextBox1, ",")
With Tabelle1
.ListObjects(1).ShowAutoFilterDropDown = True
.ListObjects(1).Range.AutoFilter Field:=ComboBox1.ListIndex + 1
If TextBox1 > "" Then
.ListObjects(1).Range.AutoFilter Field:=ComboBox1.ListIndex + 1, Criteria1:=arr, Operator:= _
xlFilterValues
If .ListObjects(1).AutoFilter.Range.Columns(ComboBox1.ListIndex + 1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
With .ListObjects(1).DataBodyRange.SpecialCells(Type:=xlCellTypeVisible)
ReDim arrWerte(1 To .Areas.Count, 1 To 6)
For i = 1 To .Areas.Count
For Each objCell In .Areas(i).Cells
j = j + 1
arrWerte(i, j) = objCell.Value
Next
j = 0
Next
End With
ListBox1.List = arrWerte
End If
Else
.ListObjects(1).Range.AutoFilter Field:=ComboBox1.ListIndex + 1
ListBox1.Clear
End If
.ListObjects(1).ShowAutoFilterDropDown = False
End With
End If
End Sub
Private Sub UserForm_Initialize()
With Tabelle1.ListObjects(1).HeaderRowRange
ComboBox1.List = WorksheetFunction.Transpose(.Rows(1).Value)
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If ComboBox1.ListIndex = -1 Then Exit Sub
Tabelle1.ListObjects(1).Range.AutoFilter Field:=ComboBox1.ListIndex + 1
End Sub
Dazu brauchst du im Userform eine ComboBox, eine TextBox und eine Listbox.
Der Filter funktioniert mittels Auswahl der zu filterenden Spalte.
In die Textbox kann einer bzw. mehrere Suchbegriffe, welche jeweils mit Komma zu trennen sind eingegeben werden.
Das Filtrat (sichtbare Zellen) im Listobject wird dann in die Listbox via Array übergeben.
Den ursprünglichen Filterweg hatte ich vor einiger Zeit mal im anderen Forum gepostet.
Gruß Uwe