Excel VBA - Range-Variable mit gefilterter Liste füllen

MickH74

Lieutenant
Registriert
Apr. 2009
Beiträge
608
Hallo Forum,

ich habe eine gefilterte Liste und würde nun gerne die sichtbaren Zellen - also das gefilterte Ergebnis - direkt in eine Range-Variable kopieren.

Für eine bessere Lesbarkeit schreibe ich nur kurz "Sheet" oder "Range" statt der kompletten Bezeichnung.

Im Moment mache ich den Umweg, die gefilterte Liste mit Sheet.Range.SpecialCells(xlCellTypeVisible).Copy in einen anderen Bereich zu kopieren und dann die Range-Variable von dort zu füttern. Aber das geht doch bestimmt auch direkt, oder?

Ich habe schon versucht, es so zu lösen:

Dim rngFilter as Range

Set rngFilter = Sheet.Range.AdvancedFilter Action:=xlFilterInPlace, Unique:=True

oder auch mit

Sheet.Range.AdvancedFilter Action:=xlFilterCopy, Unique:=True, Destination:=rngFilter


Leider gibt es bei der ersten Variante einen Syntax-Fehler und bei der zweiten Variante einen Laufzeitfehler 1004 "Anwendungs- oder objektdefinierten Fehler".

Kann mir da jemand helfen?

Danke!
Mick
 
Was soll denn eine "Range-Variable" genau sein?

Wenn du die Range (=Bereich) der sichtbaren Zeilen haben willst, wäre das ja so etwas wie:
Zeile 1
Zeile 4
Zeile 5
Zeile 22
etc.

Wenn du die entsprechenden Zeilen aber kopierst, wäre es ja eher so wie Zeilen 1 bis 50.

Oder geht es dir um den Inhalt der Zeilen und du willst die letztlich nur im Speicher haben?
Was soll dann damit gemacht werden?
 
Vielleicht ist Range-Variable der falsche Begriff. Range-Objekt wäre besser, glaub ich.

Ich möchte ein Listenfeld mit dem Ergebnis einer Tabellen-Filterung füllen, ohne dabei mit ListFillRange zu arbeiten.

Darum habe ich an etwas gedacht, dass wie in deinem ersten Beispiel die Zeilen 1, 4, 5, 22 usw. in ein Range-Objekt kopiert, wobei daraus dann Zeile 1, 2, 3, 4 usw. wird.
 
Du kannst doch auch mit einer For i to Ende Arbeiten und jede Zeile mit Höhe 0 überspringen.
Wenn eine Zeile nicht übersprungen wird, dann kopierst du dir den entsprechenden Wert heraus.
 
Hm, ja. Das wäre noch direkter. Allerdings sind solche Schleifen langsamer als wenn man direkt mit einem Befehl einen Bereich kopiert.

Mein Spezialfilter spinnt jetzt auch irgendwie. Text geht wunderbar, aber Zahlen nicht. Kann ich beim Spezialfilter erzwingen, dass eine Zahl wie Text behandelt wird? Wir haben z.B. Kundennummern. Das sind 6-stellige Zahlen. Wenn ich nun 201 eingeben, möchte ich alle Kunden mit den Nummern sehen, die 201 enthalten. Im Moment zeigt er mir gar nichts an. Auch nicht, wenn ich 201* eingeben. Bei >201 läuft sich das Makro tot und ich muss es mit Strg+Pause abbrechen. Anschließend kommt noch die Fehlermeldung, die man unten im dritten Screenshot sieht. Hat da noch jemand einen Tipp? Hab auch schon versucht, die Formatierung der Zellen (in der Tabelle und im Kriterienbereich) aus "Text" zu setzen, das hat aber nicht geholfen.

Vor dem Filtern.JPGNach dem Filtern.JPGNach dem Filtern2.JPG
 
Zuletzt bearbeitet:
Hab den Fehler gefunden. Ich habe als Datenbasis immer Spalten aus einem anderen Arbeitsblatt kopiert und diese sind als Tabelle formatiert gewesen, ohne dass man es nach dem Kopieren im neuen Arbeitsblatt sieht. Ich musste also erst einmal die Formatierung der Daten löschen und danach klappte alles wie gewünscht.

Danke nochmal für die Hilfe!
 
Zurück
Oben