Anzeige
Archiv - Navigation
1916to1920
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

3 Kriterien für Autofilter via Array

3 Kriterien für Autofilter via Array
26.01.2023 08:29:00
Kalle
Guten Morgen werte Herber-Gemeinschaft,
gestern Abend bin ich auf ein VBA-Problem gestoßen. In einer formatierten Tabelle (ListObject) soll in Spalte 3 ein Autofilter gesetzt werden, der mehrere Kriterien umfasst. Diese Kriterien werden via VBA Funktion aus einer zweiten formatierten Tabelle ermittelt und zu einem kleinen Array zusammengefügt. Eigentlich eine einfache Sache und hier mein Schema dazu mit Demo hier: https://www.herber.de/bbs/user/157473.xlsm
Sub dyn_filter_array()
Dim tbl As ListObject
Dim vardat As Variant
Dim tx As String
Dim i As Integer
Set tbl1 = Tabelle1.ListObjects("Tabelle1")
Set tbl2 = Tabelle2.ListObjects("Tabelle2")
For i = 3 To 1 Step -1
tx = tx & """" & Application.WorksheetFunction.Large(tbl2.ListColumns(1).DataBodyRange, i) & """, "
Next i
tx = Left(tx, Len(tx) - 2)
Debug.Print tx 
vardat = Array(tx) 
'tbl1.Range.AutoFilter Field:=3, Criteria1:=Array("8", "9", "10"), Operator:=xlFilterValues 'funktioniert (statisch)
tbl1.Range.AutoFilter Field:=3, Criteria1:=vardat, Operator:=xlFilterValues 'funktioniert nicht obwohl dyn. und statischer String identisch ...
End Sub
Anomalie/Problem: Wenn ich die Kriterien per Hand in den Code setze, also statisch einzeln eintrage, wird der Autofilter richtig gesetzt. Mit dem Array, welches laut Direktfenster exakt den selben String aufweist, wird die komplette Tabelle weggefiltert und kein einziges Kriterium richtig übernommen.
Ich vermute, dass der Array-String einen anderen Syntax braucht, aber ich habe schon so viel probiert (mit Kommata, mit Semikolon, mit Anführungsstriche Einzelwert, um alle Werte etc. ...). Wo liegt der Fehler?
Danke vorab und viele Grüße
Kalle

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 3 Kriterien für Autofilter via Array
26.01.2023 09:14:58
Nepumuk
Hallo Kalle,
so:
For i = 3 To 1 Step -1
    tx = tx & ";" & Application.Large(tbl2.ListColumns(1).DataBodyRange, i)
Next i
tx = Mid$(tx, 2)
vardat = Split(tx, ";")
Gruß
Nepumuk
AW: 3 Kriterien für Autofilter via Array
26.01.2023 09:50:52
Kalle
Super - jetzt gehts! Vielen Dank Nepomuk!
Und jetzt für mich zum Nachvollziehen: es lag also an der englischen Schreibweise mit ";" statt "," oder auch an der String-Verarbeitung mit Mid und Split? Wenn man auf das Trichtersymbol geht, erscheinen ja als mouse-over die gesetzten Filterkriterien, deren getrennte Schreibweise teilweise recht unterschiedlich ausfällt.
Viele Grüße
Kalle
Anzeige
AW: 3 Kriterien für Autofilter via Array
26.01.2023 09:54:37
Nepumuk
Hallo Kalle,
mit Mid$ schneide ich das erste Semikolon wieder ab und erst mit Split wird aus dem String ein Array.
Gruß
Nepumuk
AW: 3 Kriterien für Autofilter via Array
26.01.2023 10:03:14
Daniel
Hi
dein LEFT(LEN() macht im Prinzip genau das gleiche das MID, nämlich das Trennzeichen am Anfang oder Ende entfernen.
MID kann man verwenden, wenn das überzählige Trennzeichen vorne steht (";x;y;z"), LEFT(LEN()) nimmt man, wenn es hinten steht ("x;y;z;"). Da MID das LEN nicht braucht, ist es eleganter und wird daher von den meisten bevorzugt.
Ob du Komma oder Semikolon als Trennzeichen verwendest, spielt auch keine Rolle, weil für das aufsplitten eines Textes in ein Array das Trennzeichen frei wählbar ist
dein Problem ist, dass die Funktion ARRAY deinen Text nicht in ein Array aufsplittet, sondern mehrere Werte zu einem Array zusammenfasst.
Um aus dem Text ein Array zu machen, kommt die Funktion JOIN zum Einsatz, bei der man ja auch das Trennzeichen angeben kann.
Gruß Daniel
Anzeige
AW: 3 Kriterien für Autofilter via Array
26.01.2023 10:31:27
snb
Wenn ich das richtig verstehe reicht:
Sub M_snb()
  Tabelle1.ListObjects(1).Range.AutoFilter 3, 3, 3
End Sub
top 3 in column 3 in Listobject in Tabelle1.
AW: 3 Kriterien für Autofilter via Array
26.01.2023 10:51:33
Kalle
an alle: herzlichen Dank! Mit meinem Ansatz übergab ich also eine komplette Zeichenkette, die nur so aussah, als ob sie wertegetrennt sei; erst durch split ist es im Grunde so, als ob einzelne, voneinander unabhängige Filterwerte "anklickt". Ich habe das Prinzip mit den Werten vs. Array nun besser verstanden.
@snb: korrekt; das von mir gewählte Beispiel diente aber mehr der Veranschaulichung meines Problems mit den Array-Daten, die in einem anderen Projekt eine Rolle spielen.
Viele Grüße
Kalle
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige