2016-10-24 3 views
0

Das folgende Programm zeigt die Fehlermeldung „‚Autofilter‘Methode der Range-Klasse ist fehlgeschlagen“, und ich bin nicht in der Lage, die Lösung für diese zu finden:Makros Autofilter funktionieren nicht

Sub filterforaging() 

' filterforaging Macro 
' 

' 
    Columns("i:i").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Rows("1:1").Select 
    Selection.AutoFilter 
    Range("I1").Select 
    ActiveSheet.Range("$A$1:$I$10000").AutoFilter Field:=1, Criteria1:=Array(_ 
     ">10 days", "5-8days", "8-10days"), Operator:=xlFilterValues 
    Application.CutCopyMode = False 
End Sub 
+0

Sie können Autofilter nicht anwenden, wenn 'Rows (" 1: 1 ")' ausgewählt ist. Wählen Sie stattdessen 'Range (" A1 ")'. Oder besser, [wählen Sie nichts] (http://stackoverflow.com/q/10714251/1188513). –

Antwort

1

First off ">10 days" Muss sein "*>10 days", um (ich glaube) zur Vermeidung des ">" Teils Kriterien

zu einem Vergleich führen Aber dann wieder bleibt ein seltsames Verhalten "*>10 days" Filter bezogen werden:

  • , wenn Sie filtern, indem es allein

    .AutoFilter field:=1, Criteria1:="*>10 days" 
    

    es richtig die gewünschten Zeilen

  • filtern würden, wenn Sie von filtern und einen anderen Wert nur

    .AutoFilter field:=1, Criteria1:=Array("*>10 days", "8-10days"), Operator:=xlFilterValues 
    

    wäre es noch richtig funktionieren

  • aber wenn man durch sie und zwei weitere Werte filtern

    .AutoFilter field:=1, Criteria1:=Array("*>10 days", "5-8days", "8-10days"), Operator:=xlFilterValues 
    

    dann wäre es nur die beiden anderen Werte

Wie filtern, um jetzt konnte ich auf die folgende Abhilfe bekommen nur :

Dim rng1 As Range, rng2 As Range 

With ActiveSheet.Range("$A$1:$I$10000") 
    .Rows(1).AutoFilter 
    .AutoFilter field:=1, Criteria1:="*>10 days" 
    If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) - 1 > 0 Then Set rng1 = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) 

    .AutoFilter field:=1, Criteria1:=Array("5-8days", "8-10days"), Operator:=xlFilterValues 
    If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) - 1 > 0 Then Set rng2 = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) 

    .AutoFilter 
    .Columns(1).Resize(.Rows.Count - 1).Offset(1).EntireRow.Hidden = True 
    If Not rng1 Is Nothing Then rng1.EntireRow.Hidden = False 
    If Not rng2 Is Nothing Then rng2.EntireRow.Hidden = False 
End With 
+0

Vielen Dank Ihre Antwort war perfekt, – Nagarjun

+0

es funktionierte perfekt – Nagarjun

+0

@ Nagarjun, froh zu wissen, dass. Dann markiere bitte die Antwort als akzeptiert, indem du auf das Häkchen neben der Antwort klickst, um es von ausgegraut auf ausgefüllt umzuschalten. Danke – user3598756

Verwandte Themen