Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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 Array

Autofilter mit Array
18.07.2022 08:30:30
MalteF
Liebes Forum,
Mein Makro soll eine unbestimmte Menge an Eingaben in einem Array speichern und dieses Werte als Kriterium in einem Autofilter anwenden.
Ich erhalte aber beim ersten Durchlauf des Makros die Fehlermeldung: die Autofilter-Methode des Range-Objektes konnte nicht ausgeführt werden und bei jedem weiteren Durchlauf die Fehlermeldung:
Laufzeitfehler
Automatisierungsfehler Das aufgerufene Objekt wurde von den Clients getrennt.
Mein Array wird so mit Daten gefüllt und dies funktioniert auch.

Public arrBezeichnung As Object
Set arrBezeichnung = CreateObject("System.Collections.ArrayList")
For i = 4 To Länge_der_Eingabe
arrBezeichnung.Add Range("G" & i).Value
Next i
Mein Problem liegt in:

ActiveSheet.Range("$A$1:$X$" & Spalten_länge).AutoFilter Field:=16, Criteria1:=arrBezeichnung, Operator:=xlFilterValues
sobald diese Zeile ausgeführt wird kommen die Fehlermeldung.
Danke schon mal für jede Art von Unterstützung und Tipps
Gruß Malte

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter mit Array
18.07.2022 08:46:50
Oberschlumpf
Hi Malte,
eine Bsp-Datei per Upload mit allem, was erforderlich ist, um deine Frage zu verstehen, wäre schön.
In deinem Code-Miniauszug seh ich z Bsp nicht, wie/wo/welchen Wert Spalten_länge erhält - und - mit "$X$" wird doch schon die Spalte X vorgegeben, wieso dann noch Spalten_länge? - ahhh...könnte es sein, dass du Anzahl benutzer Zeilen meinst?
Ciao
Thorsten
AW: Autofilter mit Array
18.07.2022 09:24:54
MalteF
Moin Thorsten,
Ich kann leider aus Datenschutz keine Beispieldatei hochladen, aber erstmal vielen Dank fürs schnelle Antworten.
Spalten_länge ist eine Integer Variable, in welcher die Anzahl benutzter Zeilen gezählt wird, da ich nicht weiß wie groß die Datei ist in welcher ich Filtern will.
$A$1:$X$: Hier will ich lediglich den gesamten Tabellen Bereich auswählen in dem der Autofilter filtern soll.
Der Filter soll dann in Spalte P (16) gesetzt werden.
Dies sind die beiden Integer Variablen und welche Werte sie haben.

Länge_der_Eingabe = Worksheets("Einlesen").Range("G1").Cells(Rows.Count, 1).End(xlUp).Row
Ich habe vor dem Array Autofilter noch weiter Filter in anderen Spalten, welche auch ohne Probleme funktionieren. Nur dieser Filter mit dem Array funktioniert nicht.

wkbZiel.Worksheets("Daten").Activate
Spalten_länge = Worksheets("Daten").Range("V1").Cells(Rows.Count, 1).End(xlUp).Row
wkZiel ist als Workbook deklariert und ist eine andere Datei als die wo die Daten herkommen.
ich hoffe das hilft um zu verstehen was mein Makro macht.
LG
Malte
Anzeige
AW: Autofilter mit Array
18.07.2022 09:58:38
Oberschlumpf
Hi Malte,
"Ich kann leider aus Datenschutz keine Beispieldatei hochladen"
Und wieso nich?
Beispieldatei bedeutet doch, dass du alle echten Überschriften/Datenwerte/sonstiges echtes mit Bsp-Überschriften/Datenwerten/sonstiges als Bsp ersetzen müsstest.
Und ja, angenommen, deine echte Datei enthält z Bsp 100 Datenzeilen, musst du natürlich nich 100 Bsp-Datenzeilen "herzaubern"!
Um anständig testen zu können, reichen im Normalfall ja schon 5 bis 10 Bsp-Datenzeilen oder so.
Wenn du das nich hinbekommst, kann zumindest ich leider nicht helfen, da ich schon viel zu oft die Erfahrung machte, wenn ich ohne Bsp-Datei vom Fragenden selbst eine Bsp-Datei mit genau dazu passendem VBA-Code erstellte, dass dann Antworten kamen, wie z Bsp "in Bsp-Datei alles super, aber wie kann ich das in meine echte Datei übertragen?"...oder eben ähnliche Antworten.
Oder du wartest auf andere, sehr gute Antworter - die schaffen das oft auch ohne Bsp-Datei vom Fragenden.
Ciao
Thorsten
Anzeige
AW: Autofilter mit Array
18.07.2022 10:08:32
Luschi
Hallo MalteF,

Ich kann leider aus Datenschutz keine Beispieldatei hochladen,
Wir wollen keine Datei mit Originaldaten, sondern 1 Beispieldatei mit Dummy-Daten, die aber das Problem widerspiegeln.
Ich habe mir 1 Demodatei dazu gebastelt (wer bezahlt mir diesen Einsatz?) und dabei festgestellt, daß Excel 2019 katastrophal abstürzt, wenn man ein Objekt aus dem Dot.Net-FrameWork (und das ist eben CreateObject("System.Collections.ArrayList") im Excel-Filter-Objekt verwendet.
Man muß wohl oder übel das .Net-Objekt zurück-switchen in ein Vba-Array-Objekt.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Autofilter mit Array
18.07.2022 11:05:02
Daniel
Hi
probiers mal so:

Public strBezeichnung as string
Public arrBezeichnung()
For i = 4 To Länge_der_Eingabe
strBezeichung = strBezeichnung & "|" &  Range("G" & i).Value
Next i
arrBezeichnung = split(mid(strBezeichnung, 2), "|")

 ActiveSheet.Range("$A$1:$X$" & Spalten_länge).AutoFilter Field:=16, Criteria1:=arrBezeichnung, Operator:=xlFilterValues
noch ne Frage: liegen beide Codeteile im selben Makro?
wenn ja, ist eine Deklaration als Public für die Variablen unnötig.
sollten mehrere Markos beteiligt sein, müssen Variablen, die von mehreren Makros verwendet werden, oberhalb der Markros deklariert werden, direkt unter Option Explicit. Eine Deklaration innerhalb eines Makros darf für solche Variablen dann nicht mehr erfolgen.
Gruß Daniel
Anzeige
AW: Autofilter mit Array
18.07.2022 11:45:01
MalteF
Moin Daniel,
erstmal Danke. Ich habe gerade mal den Teil des Codes freigeschnitten der Relevant ist. Ich kann die Datei jedoch nicht Hochladen (Das Hochladen ist in meinem Netzt gespert)
Zur Erklärung: Mein Makro soll wenn Herkunftsländer nicht anzeigen ausgewählt wird, alle Länder einlesen (Konfig Datei) und dann die rausstreichen die eingegeben wurden. Das geht mit dem Aktuellen Code auch, nur das der Auto Filter mit dem Format nicht zurecht kommt.

Public arrHerkunftstländer As Object
Public arrHerkunftstländer_nicht_anzeigen As Object
Sub Test()
Dim Länge As Integer
Dim Landlänge As Integer
'Zählen der Länge für eingegebene filter der hkLändern und den Stammdatend der hkLändern
Länge = Worksheets("Makro").Range("G1").Cells(Rows.Count, 1).End(xlUp).Row
Landlänge = Worksheets("Konfig").Range("A1").Cells(Rows.Count, 1).End(xlUp).Row
'Erstellung Array
Set arrHerkunftstländer = CreateObject("System.Collections.ArrayList")
'Eintragung aller Daten der hkLändern aus Eingabe
For i = 4 To Länge
arrHerkunftstländer.Add Range("G" & i).Value
Next i
Anzeigen_oder_nicht = True
'Wenn nicht anzeigen ausgewählt ist wird ein neues Array erstellt
If Worksheets("Makro").Range("G3").Value = "Nicht anzeigen" Then
Set arrHerkunftstländer_nicht_anzeigen = CreateObject("System.Collections.ArrayList")
For k = 2 To Landlänge
arrHerkunftstländer_nicht_anzeigen.Add Worksheets("Konfig").Range("A" & k).Value
Next k
Landlänge = Worksheets("Konfig").Range("A1").Cells(Rows.Count, 1).End(xlUp).Row
For Filter_nicht_Anzeigen = arrHerkunftstländer_nicht_anzeigen.Count - 1 To 0 Step -1
For j = 0 To Länge - 4
If arrHerkunftstländer_nicht_anzeigen(Filter_nicht_Anzeigen) = arrHerkunftstländer(j) Then
arrHerkunftstländer_nicht_anzeigen.Remove arrHerkunftstländer(j)
End If
Next j
Next Filter_nicht_Anzeigen
Anzeigen_oder_nicht = False
End If
Worksheets("Daten").Activate
ActiveSheet.Range("$A$1:$X$" & Länder_Spalten_länge).AutoFilter Field:=16, Criteria1:=arrHerkunftstländer_nicht_anzeigen, _
Operator:=xlFilterValues
End Sub
Das Makro bezieht sich auch auf die UserForm, da dort die Daten eingetragen werden und auf verschiedenste unter Subs. Insgesamt ist dies nur ein kleiner Ausschnitt des Makros.
Ich bedanke mich auf jeden Fall schon einmal bei euch allen fürs schnelle Antworten.
Anzeige
AW: Autofilter mit Array
18.07.2022 12:37:27
Daniel
Hi
der Autofilter braucht ein eindimensionales Array.
dein "arrBezeichnung" ist technisch gesehen jedoch kein Array, sondern ein Objekt.
Du musst da erst ein Array daraus machen.
Dafür gibts einen Befehl:

... Criteria1:=arrBezeichnung.toarray, Operator:=xlFilterValues
Gruß Daniel
AW: Autofilter mit Array
18.07.2022 13:28:35
MalteF
Hallo Daniel,
Es funktioniert. Vielen Dank für deine Zeit und das lösen des Problems.
Was so 8 Zeichen ausmachen können : )
Gruß Malte

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige