Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
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
Autofilter mit VBA
Hermann
Hallo ,
in einem früheren Beitrag habe ich das bereits archivierte Thema schon mal eröffnet, kam aber wg Umzug nicht mehr dazu mich darüm zu kümmern.
Hier nun ein erneuter Versuch diesmal hoffentlich verständlicher formulert.
Wie kann man mit VBA die Eintrage (zB. siehe unten Test1, Test2 etc.) im Autofilter der Spalte 7 nach und nach selektieren, wobei die Anzahl der Einträge variieren kann.
Selection.AutoFilter
Selection.AutoFilter Field:=7, Criteria1:="Test1"
Cells.Select
Selection.Copy
...... (hier werden weitere Aktionen mit der kopierten Selektion durchgeführt)
Selection.AutoFilter Field:=7, Criteria1:="Test2"
Cells.Select
Selection.Copy
etc...
Gruß
Hermann

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Autofilter mit VBA
02.12.2011 07:41:42
fcs
Hallo Hermann,
die Filterwerte der Spalte kann man in einer For-Next-Schleife in eine sogenannte Collection einsammeln. Durch festlegen des Key-Parameters werden alle Werte nur einmal eingelesen.
In einer 2. For-Next-Schleife werden dann die Werte der Collection als Filterwerte setzen.
Wie dann das Kopieren der jeweils gefilterten Werten optimal ausgeführt werden kann ist aus deinem Code ja nicht ersichtlich.
Ich hab es mal so eingerichtet, dass eine neu Arbeitsmappe angelegt wird und die Werte jedes Filters in ein eigenes Blatt kopiert werden.
Gruß
Franz
Sub aaTest()
Dim objRange As Range, objZelle As Range, objRangeFilter As Range
Dim wksAktiv As Worksheet, wbZiel As Workbook, wksZiel As Worksheet
Dim objCollection As New Collection, intI As Integer, boolAdd As Boolean
On Error GoTo Fehler
Set wksAktiv = ActiveSheet
'Prüfen, ob Autofilter schon aktiv
If wksAktiv.AutoFilterMode = True Then
If wksAktiv.FilterMode = True Then
wksAktiv.ShowAllData
End If
Else
Selection.AutoFilter
End If
'Autofilterbereich der aktiven Tabelle
Set objRangeFilter = wksAktiv.AutoFilter.Range
'Sortierte Liste ohne Doppelte der Werte in Spalte 7 des Autofilter-Bereichs erstellen
Set objRange = wksAktiv.AutoFilter.Range.Columns(7)
For Each objZelle In objRange.Cells
If objZelle.Row  wksAktiv.AutoFilter.Range.Row Then
If objCollection.Count = 0 Then
objCollection.Add objZelle.Value, Key:=CStr(objZelle.text)
Else
For intI = 1 To objCollection.Count
If objZelle.Value 

Anzeige
AW: Autofilter mit VBA
02.12.2011 14:45:31
Hermann
Hallo Franz,
das ist genau was ich gesucht habe !!
Beim Testen ist nun folg aufgefallen:
Bei der Anlage des 2 .Tab.blattes in der neuen Zieldatei kommt die Fehlermeldung, das bei Umbenennung des Blattnamens die Umbennung des Blattnamens unzulässig ist. Wenn ich mir die neue Zieldatei aber ansehe sind die Blätter $$Muster$$ und $$Muster$$(2) angelegt, was eigentlich nicht gegen die Blattnamenkonvention spricht.
Ferner scheint das Kopieren der Daten in die Zieldatei nicht zufunktionieren. Im 1. Blatt ($$Muster$$) stehen keine kopierten Daten.
Viele Grüße
Hermann
AW: Autofilter mit VBA
02.12.2011 21:23:40
fcs
Hallo Hermann,
es gibt ein paar Zeichen, die sind als Blattname nicht zulässig. Schein kommen die in Spalte 7 der Tabelle vor.
Das Blatt "$$Muster$$" wird ja zu beginn des Makros ohne Daten kreiert. Wenn das Makro ohne Fehler durchläuft, dann wird nach dem abarbeiten aller Filter wieder gelöscht.
Mit den nachfolgenden Ergänzunge sollte es funktionieren. Die unzulässigen Zeichen werden durche einen "_" ersetzt.
Gruß
Franz
Sub aaTest()
Dim objRange As Range, objZelle As Range, objRangeFilter As Range
Dim wksAktiv As Worksheet, wbZiel As Workbook, wksZiel As Worksheet
Dim objCollection As New Collection, intI As Integer, boolAdd As Boolean
On Error GoTo Fehler
Set wksAktiv = ActiveSheet
'Prüfen, ob Autofilter schon aktiv
If wksAktiv.AutoFilterMode = True Then
If wksAktiv.FilterMode = True Then
wksAktiv.ShowAllData
End If
Else
Selection.AutoFilter
End If
'Autofilterbereich der aktiven Tabelle
Set objRangeFilter = wksAktiv.AutoFilter.Range
'Sortierte Liste ohne Doppelte der Werte in Spalte 7 des Autofilter-Bereichs erstellen
Set objRange = wksAktiv.AutoFilter.Range.Columns(7)
For Each objZelle In objRange.Cells
If objZelle.Row  wksAktiv.AutoFilter.Range.Row Then
If objCollection.Count = 0 Then
objCollection.Add objZelle.Value, Key:=CStr(objZelle.text)
Else
For intI = 1 To objCollection.Count
If objZelle.Value 

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige