Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofilter mit ListBox verknüpfen

Autofilter mit ListBox verknüpfen
28.12.2023 12:00:23
Thomas
Guten Tag zusammen...
Gerne würde ich einen Autofilter einsetzen. Der Autofilter soll über eine Userform (ListBox) die darin ausgewählten Werte erhalten die er dann sucht.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
ActiveSheet.Range(Range).AutoFilter 2, Criteria1:=Array(.Range("B7")), Operator:=xlFilterValues, VisibleDropDown:=False
------------------------------------------------------------------------------------------------------------------------------------------------------------------

Der Code ist als Beispiel zu nennen. (habe diesen in der UserForm). Meine Annahme ist es dass im Criterial1 ein Array mit dieser ListBox gefüllt werden muss.

Hat irgend wer ein Musterbeispiel das ev. verwendet werden darf?

Ein Autofilter einzubauen ist nicht das Problem. Aber die ListBox, die in der Userform ist, das Array füllen soll ist mir zu hoch.

Besten Dank und Gruss
Thomas

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 12:25:08
onur
Wenn du ein Array mit dem Inhalt der Listbox füllen willst:

Arr=Listbox1.List


Aber was soll das denn hier ?
Array(.Range("B7"))

Ein Array mit einem einzigen Element?
AW: Autofilter mit ListBox verknüpfen
28.12.2023 12:34:19
Thomas
Hallo Onur,
danke für die Info. Ist das schon alles? Ich baue es mal zusammen und schaue was passiert.

Bezüglich deiner Frage: Das ist natürlich Unsinn. Das Array mit einem einzigen Eintrag war nur Teil des Beispiels. Mehr nicht.

Gruss
Thomas
AW: Autofilter mit ListBox verknüpfen
28.12.2023 15:41:07
Thomas
Onur
das mit dem füllen eines Array mit werten aus der ListBox war ein guter Hinweis. Habe aber 0 Chance dieses Array zu füllen.
Anzeige
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
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 16:27:22
Thomas
Uwe hallo,
danke erst mal, muss dieses Skript erst mal verdauen. Du bringst mich damit schon wieder auf neue Ideen.
Gruss
Thomas
AW: Autofilter mit ListBox verknüpfen
28.12.2023 16:46:22
Thomas
Hallo Onur,
danke, ich denke ich war doch sehr nahe. Hätte ich das Lokalfester von Anfang an betrachtet wäre hätte ich die Ergebnisse gesehen.

Was aber noch nicht geht, denke ich ist wenn ich mit dem ListBox1.MultiSelect = fmMultiSelectMulti mir die Werte herauspicke, dann nur diese genommen werden. Muss ich hier eine IF Verzeigung einbauen oder geht das anders?

Gruss
Thomas
AW: Autofilter mit ListBox verknüpfen
28.12.2023 17:50:42
Alwin Weisangler
mit Multiselect der Listbox den Filter steuern so:



Option Explicit

Private Sub Suchen()
Dim i&, j&, arr()
If ComboBox1.ListIndex > -1 Then
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
ReDim Preserve arr(0 To j)
arr(j) = .List(i, 0)
j = j + 1
End If
Next i
End With
With Tabelle1
.ListObjects("Tbl_Liste").ShowAutoFilterDropDown = True
.ListObjects("Tbl_Liste").Range.AutoFilter Field:=ComboBox1.ListIndex + 1
If j > 0 Then
.ListObjects("Tbl_Liste").Range.AutoFilter Field:=ComboBox1.ListIndex + 1, Criteria1:=arr, Operator:= _
xlFilterValues
Else
.ListObjects("Tbl_Liste").Range.AutoFilter Field:=ComboBox1.ListIndex + 1
End If
.ListObjects("Tbl_Liste").ShowAutoFilterDropDown = False
End With
End If
End Sub

Private Sub ComboBox1_Change()
Dim objDic As Object
Dim i&
Set objDic = CreateObject("Scripting.Dictionary")
If ComboBox1.ListIndex > -1 Then
With Tabelle1.ListObjects(1).DataBodyRange
For i = 2 To .Rows.Count
objDic(.Cells(i, ComboBox1.ListIndex + 1).text) = 0
Next
ListBox1.List = objDic.keys
End With
Else
ListBox1.Clear
End If
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Suchen
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("Tbl_Liste").Range.AutoFilter Field:=ComboBox1.ListIndex + 1
End Sub

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

Gruß Uwe
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:43:15
Thomas
danke Uwe, was du mir da zeigst, ist absolut top. Für meine Verhältnisse noch zu komplex. Zudem müsste ich alle meine Skripte umbauen um mit diesen guten Sachen die du da zeigst etwas anfangen zu können. Ich brauche nur Details um diese weiter zu entwickeln. Manchmal helfen eben kleine Hilfen die bei mir dann grosse Sprünge bewirken. Onur ist gerade dran mit solchen Beispielen.

Aber herzlichen Dank für deine Aufmerksamkeit die ich sehr schätze.
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:14:50
onur
Guckst du hier:
Wenn nix ausgewählt, kommt die ganze Liste, wenn was ausgwählt, nur die Auswahl.
https://www.herber.de/bbs/user/165515.xlsm
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:38:00
Thomas
Danke Onur,
das wird es dann sein was ich weiter einbinden will.

Ich versuchte gerade mit einer MsgBox den ausgewählten Wert auszulesen "MsgBox var

Aber das war auch schon wieder falsch.
Mit welchem Befehl müsste ich mir den Wert via MsgBox anzeigen lassen? Das wäre für Später dann der Schlüssel für die Übergabe in den Filter.


heute ist so ein Tag da gelingt mir einfach absolut nix!

Aber die Sache mit den Array das ist für meine Verhältnisse schon ein ganz neues Kapitel. Suche gerade eine gute Lektüre. Aber wie immer in der Kombination wie ich es gleich anwenden will, sprengt es jede Lektüre oder man findet eben gar nichts dazu.

Gruss
Thomas

Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:40:13
onur
MsgBox kann nur einen Wert ausgeben, kein Array.
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:47:34
Thomas
dann verstehe ich es aber so dass der Ansatz beim Filter so geht?

ActiveSheet.Range(Range).AutoFilter 1, Criteria1:=Array(arr), Operator:=xlFilterValues, VisibleDropDown:=False
AW: Autofilter mit ListBox verknüpfen
28.12.2023 18:54:47
onur
Array(arr) ???
Arr ist schon ein Array ! Willst du aus einem Array ein Array machen?
Einfach nur Arr ohne alles...
https://www.herber.de/bbs/user/165516.xlsm
AW: Autofilter mit ListBox verknüpfen
28.12.2023 19:39:10
Thomas
Einfach nur Arr ohne alles. Ja das habe ich versucht. Hier das Skript. Der Filter der frisst es einfach nicht. Habe es auch mit txt versucht, das tut auch nicht.

Private Sub CommandButton1_Click()
Dim Arr, arr2(), txt, i, anz As Integer
ReDim arr2(0)
txt = "ALLES"
Arr = ListBox1.List
Arr = WorksheetFunction.Transpose(Arr)
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
If anz = 0 Then txt = ""
If anz > 0 Then
txt = txt & ","
ReDim Preserve arr2(anz)
End If
arr2(anz) = .List(i)
txt = txt & .List(i)
anz = anz + 1
End If
Next i
End With
If Not IsEmpty(arr2(0)) Then Arr = arr2


ActiveSheet.Range("A1:A20").AutoFilter 1, Criteria1:=Arr, Operator:=xlFilterValues, VisibleDropDown:=False



End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()


UserForm1.ListBox1.RowSource = "A1:A20"


ListBox1.ListStyle = fmListStylePlain
ListBox1.ListStyle = fmListStyleOption


ListBox1.MultiSelect = fmMultiSelectSingle
ListBox1.MultiSelect = fmMultiSelectMulti
End Sub


Gruss
Thomas
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 20:23:41
onur
Wo ist das Problem? Funktioniert doch !
Userbild
AW: Autofilter mit ListBox verknüpfen
28.12.2023 20:33:54
Thomas
Ja Onur, das habe ich getestet, das funktioniert einwandfrei.
Ich ging dann ein schritt weiter und versuchte es dem Filter zu übergeben.

Aber ich verzweifle, wenn ich es dem Filter füttere dann geht es nicht.
AW: Autofilter mit ListBox verknüpfen
28.12.2023 20:47:53
Thomas
Onur, ich vermute wir meinen nicht das selbe.

Ich will diese txt zeichenkette dem Autofilter übergeben. der Autofilter der bewegt dann ja eine Tabelle mit mehreren Spalten.

Mir ist jetzt aber ein Licht aufgegangen als ich mal den Autofilter mit dem Critical=:Array getestet habe mir ist aufgefallen das die Gänsefüsschen im string fehlen.

Dein txt müsste den String nach so einer Zeichenkette ausgeben dann würde es wohl gehen. So: ("5", "7", "9") mit oder ohne Klammer das ist egal, wenn diese im txt fehlen kann ich sie beim Autofilter dazufügen.
Anzeige
AW: Autofilter mit ListBox verknüpfen
28.12.2023 21:23:43
onur
Dann poste endlich mal eine Datei, damit auch Andere wissen, was du willst...
" der Autofilter der bewegt dann ja eine Tabelle mit mehreren Spalten. " - so ein Autofilter bewegt gar nix, er filtert nur.
AW: Autofilter mit ListBox verknüpfen
28.12.2023 22:20:52
Thomas
Habe eine Datei bereitgestellt ohne schi schi Formatierung. einfach Gerüst mit Skripten. Hoffe das reicht. einfach mal die Userform anklicken, und aus der Listbox ein paar Kästchen markieren und schauen wie es nicht geht.

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

Gruss und Dank
Thomas
AW: Autofilter mit ListBox verknüpfen
28.12.2023 22:42:39
ralf_b
Worksheets("Tabelle1").Range("A10:C20").AutoFilter 1, Criteria1:=Array(Split(txt, ",")), Operator:=xlFilterValues
Anzeige
AW: Autofilter mit ListBox verknüpfen
29.12.2023 09:02:42
Thomas
Guten Morgen und besten Dank Onur und Ralf.
Gerne !
29.12.2023 10:06:07
onur
AW: Gerne !
29.12.2023 12:04:05
Thomas
Mein Pulsschlag ist heute tiefer als gestern. Dank deinem Einsatz. Danke nochmal. Jetzt öffnen sich Tür und Tor und kann jetzt doch einiges weiter entwickeln.
Würde mich eigentlich schon interessieren was du für eine Ausbildung hast um diese Sprache so zu beherrschen, weil es ist ja nicht das einzige wo du mir schon helfen konntest.
AW: Gerne !
29.12.2023 12:08:26
onur
Wenn du VBA meinst; alles autodidaktisch. Ich hab schon programmierbare Taschenrechner programmiert, bevor es Personal Computer zu kaufen gab.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige