Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ActiveSheet.Range Autofilter Criteria1

ActiveSheet.Range Autofilter Criteria1
05.11.2014 14:29:26
Günter
Hallo,
Sheets("Tabelle1").Select
ActiveSheet.Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:="101"
Range("A1:C999").Select
Selection.Copy
Sheets("101").Select
ActiveSheet.Paste
ich selektiere aus einem Blatt die Sätze mit "101" heraus und kopiere diese Felder in das Tabellenblatt "101".
Wie kann ich das parametrisieren, dass auch die Kriterien 102 - 199 in die jeweiligen gleichlautenden Tabellenblätter kopiert werden.
Oder ist hier activeSheet.range der völlig falsche Ansatz?

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
05.11.2014 14:36:42
Hajo_Zi
ich baue keine Datei nach.
Sub Kopieerstellen()
Dim LoI As Long
For LoI = 102 To 199
With Sheets("Tabelle1")
.Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:=LoI
.Range("A1:C999").Copy Sheets(LoI).Range("A1")
End With
Next LoI
End Sub
Gruß Hajo

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
06.11.2014 07:27:37
Günter
Hallo Hajo,
vielen Dank für die schnelle Antwort.
Sieht gut aus, aber leider tritt ein weiterer Fehler auf:
"Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs"
Bei debuggen hängt er sich auf in der Zeile .range("A1:C999").copy sheets(LoI).Range("A1")
Gruß
Günter

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
06.11.2014 07:35:12
Hajo_Zi
Hallo Günter,
ich vermute mal die Tabelle aktuelle Tabelle LoI gibt es nicht.
Ich sehe meinen Code nicht.
davor vielleicht, was mir nicht gefällt
On Error Resume Next
und vor End Sub
On Error Goto 0
Gruß Hajo

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
06.11.2014 07:35:31
hary
Moin
Wandel mal LoI in Text um.
.Range("A1:C999").Copy Sheets(CStr(LoI)).Range("A1")

gruss hary

AW: ActiveSheet.Range Autofilter Criteria1
06.11.2014 08:04:08
Günter
Hallo Hary,
danke für den Tipp.
War wohl Gedankenübertragung :-)
Auf die Idee bin ich gerade selbst gekommen.
Funktioniert fast...
Sub blatt_kopieren()
Dim LoI As Long
For LoI = 101 To 199
With Sheets("Tabelle1")
.Range("$A$2:$C$999").AutoFilter Field:=3, Criteria1:=LoI
.Range("A2:C999").Copy Sheets(CStr(LoI)).Range("A2")
End With
Next LoI
End Sub
Aber er hängt sich auf, wenn loi kleiner als 199 ist.
Wenn ich loi = 101 to 106 setze, funktioniert es.
Wie sähe die Anweisung aus, wenn loi kein numerischer Wert ist, sondern ein string.
FOR LOI = ? to ?
Sorry, bin in Sachen VBA noch ziemlich blank
Gruß
Günter

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
06.11.2014 09:45:18
hary
Moin
Versteh ich dich richtig, das Filterkriterium sind die Blattnamen?
Dim wks As Worksheet
With Worksheets("Tabelle1").Range("$A$2:$C$999")
For Each wks In Worksheets
If wks.Name  "Tabelle1" Then
If Worksheets("Tabelle1").AutoFilterMode = True Then Worksheets("Tabelle1").ShowAllData
.AutoFilter Field:=3, Criteria1:=wks.Name
.Copy wks.Range("A2")
End If
Next
.AutoFilter
End With

gruss hary

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
10.11.2014 11:17:10
Günter
Hallo hary,
jo richtig....
Zuerst lese ich die Spalte 3 aus und erstelle leere Blätter mit Namen Zelle=worksheet.
Dann möchte ich die in Spalte 3 gefilterten Zeilen in die neu angelegten worksheets kopieren.
Jetzt bekomme ich den Fehler:
Laufzeitfehler 1004
Die ShowAllData-Methode des worksheet-Objektes konnte nicht aufgeführt werden.

Anzeige
AW: ActiveSheet.Range Autofilter Criteria1
10.11.2014 13:22:44
Günter
habe jetzt ein "On Error Resume Next" eingefügt und das Makro funktioniert.
Nur: Ich bin neugierig und möchte wissen, warum es vorher NICHT funktioniert hat.
Wahrscheinlich "hängt" er sich an der ersten Zeile (Überschrift) auf, weil dort in field 3 das Kriterium wks.name nicht erfüllt ist. Oder liege ich da falsch.
Sorry für die dumme Frage, aber von Fehler zu Fehler lerne ich dazu...hoffentlich...
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Autofilter mit ActiveSheet.Range in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Autofilter in Excel VBA mit ActiveSheet.Range zu nutzen, kannst du die folgende Vorgehensweise befolgen:

  1. Öffne den Visual Basic for Applications (VBA)-Editor in Excel.

  2. Füge ein neues Modul hinzu.

  3. Schreibe das folgende Skript:

    Sub Kopieerstellen()
       Dim LoI As Long
       For LoI = 101 To 199
           With Sheets("Tabelle1")
               .Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:=LoI
               .Range("A1:C999").Copy Sheets(CStr(LoI)).Range("A1")
           End With
       Next LoI
    End Sub
  4. Stelle sicher, dass die Blätter mit den Namen 101 bis 199 existieren.

  5. Führe das Skript aus. Es filtert die Daten basierend auf dem dritten Feld und kopiert die gefilterten Werte in die entsprechenden Blätter.


Häufige Fehler und Lösungen

  • Laufzeitfehler '9': Index außerhalb des gültigen Bereichs

    • Dieser Fehler tritt auf, wenn das Zielblatt (z.B. "101") nicht existiert. Stelle sicher, dass alle benötigten Blätter bereits angelegt sind.
  • Laufzeitfehler 1004: ShowAllData-Methode konnte nicht ausgeführt werden

    • Dieser Fehler kann auftreten, wenn der Autofilter nicht aktiv ist. Verwende On Error Resume Next, um den Fehler zu ignorieren, oder prüfe, ob der Autofilter aktiv ist, bevor du ShowAllData aufrufst.

Alternative Methoden

Falls du eine flexiblere Lösung möchtest, kannst du die Filterkriterien dynamisch gestalten, zum Beispiel indem du die Blattnamen als Kriterien verwendest:

Dim wks As Worksheet
With Worksheets("Tabelle1").Range("$A$2:$C$999")
    For Each wks In Worksheets
        If wks.Name <> "Tabelle1" Then
            If Worksheets("Tabelle1").AutoFilterMode = True Then Worksheets("Tabelle1").ShowAllData
            .AutoFilter Field:=3, Criteria1:=wks.Name
            .Copy wks.Range("A2")
        End If
    Next
    .AutoFilter
End With

Praktische Beispiele

Hier sind einige Beispiele, um den Autofilter in VBA zu verwenden:

  1. Einzelnes Kriterium filtern:

    Sheets("Tabelle1").Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:="101"
  2. Mehrere Kriterien filtern:

    Du kannst auch mehrere Kriterien angeben, indem du ein Array verwendest:

    .AutoFilter Field:=3, Criteria1:=Array("101", "102"), Operator:=xlFilterValues
  3. Nicht-leere Zellen filtern:

    Um nicht-leere Zellen zu filtern, kannst du folgendes verwenden:

    .AutoFilter Field:=3, Criteria1:="<>"

Tipps für Profis

  • Verwende ActiveSheet nur, wenn du sicher bist, dass das richtige Blatt aktiv ist. In vielen Fällen ist es besser, explizit auf das Blatt zu verweisen.
  • Nutze With-Anweisungen für klarere und kürzere Codes, um wiederholte Verweise zu vermeiden.
  • Experimentiere mit verschiedenen Criteria1-Werten, um die Flexibilität deines Codes zu erhöhen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Selection.AutoFilter und ActiveSheet.Range.AutoFilter?
Selection.AutoFilter wendet den Autofilter nur auf die aktuell ausgewählte Zelle oder den ausgewählten Bereich an, während ActiveSheet.Range.AutoFilter auf einen definierten Bereich auf dem aktiven Blatt angewendet wird.

2. Wie kann ich mehrere Filter gleichzeitig anwenden?
Du kannst mehrere Filterkriterien in einem Array angeben und den Operator auf xlFilterValues setzen. Beispiel: .AutoFilter Field:=3, Criteria1:=Array("101", "102"), Operator:=xlFilterValues.

3. Was bedeutet Criteria1:="<>”?
Dieser Ausdruck filtert alle nicht-leeren Zellen im angegebenen Bereich. Es zeigt also alle Zellen an, die nicht leer sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige