2013-07-31 9 views
5

Dziękujemy za przybycie do tego wątku.Excel VBA: Jak odfiltrować tylko jeden zakres autofiltrów naraz? Kod pod warunkiem

Co mam:

raport -A z krytym Autofiltr w rzędach A: G

Co potrzebne:

-Circumstantial kod unfilters konkretną kolumnę, jeśli istnieje filtr na nim.

-Przekłuwanie mojego kodu poniżej powoduje zanik całego zakresu A: G.

- W tym przypadku chcę, aby tylko "F" było niefiltrowane, pozostawiając tylko inne filtry, jeśli są filtrowane.

With Sheets("DATA") 
    If .Range("F1").AutoFilter = True Then 
     ActiveSheet.Range("$A$1:$G$59826").AutoFilter Field:=6 
    Else 
    End If 
End With 

Wszelkie pomysły są mile widziane! Dziękuję bardzo!

+0

Twój kod wygląda dobrze dla mnie, przetestowałem go i kiedy go wypróbuję, robi dokładnie to, o co prosisz, usuwa autofiltr z jednego pola. – user2140261

+0

Po uruchomieniu kodu całkowicie usuwa on autofiltr. – dendarii

+0

Jednak usuwa również inne pola, które zostały już przefiltrowane. W związku z tym automatyczne filtrowanie będzie resetowane w kolumnach B i C, jeśli są one filtrowane. Właściwie odpowiedziałem na własne pytanie, ale nie mam wystarczającej liczby przedstawicieli, aby na nie odpowiedzieć. Oto kod: Addr = Split (ActiveSheet.UsedRange.Address, "$") lastRow = Addr (UBound (Addr)) For r = lastRow To 1 Step -1 If Len (Cells (r, "A") .Value) Następnie lastRow = r Zakończ dla Zakończ Jeśli Dalej ActiveSheet.Range ("$ A 1: $ G" i lastRow).Pole automatycznego filtrowania: = 6 –

Odpowiedz

6

Spróbuj tego:

Sub UnFilter() 
Dim ws As Excel.Worksheet 

Set ws = Worksheets("DATA") 
With ws 
    If .AutoFilterMode = True Then 
     If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then 
      .Range("$A$1:$G$59826").AutoFilter Field:=.Range("G:G").Column 
     End If 
    End If 
End With 
End Sub 

Ta linia w kodzie:

If .Range("F1").AutoFilter = True 

... faktycznie wyłącza filtrowanie dla całego arkusza. Zamiast moje kod sprawdza, czy arkusz jest filtrowane:

If .AutoFilterMode = True Then 

Następnie sprawdza czy filtr zawiera kolumna G z:

If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then 

Zrobiłem kilka zmian do kodu nieco bardziej elastyczne . Umożliwia także Intellisense dla obiektu ws, co jest pomocne. (I zawsze znaleźć różne Filter właściwości i metody związane z kondensatorem mylące, zwłaszcza bez automatycznego uzupełniania.)

1

ten pracował dla mnie

Sub UnfilterColumn() 

    With Worksheets("DATA") 
     If Not Worksheets("DATA").AutoFilter Is Nothing Then 
       ThisWorkbook.Sheets("DATA").Range("A1").AutoFilter Field:=6 
     End If 
    End With 

End Sub 
+0

To nie działa dla mnie. Nic się nie zmienia, gdy działa. Mam filtr na innej kolumnie i na G. –

+0

Jeśli filtr, który chcesz usunąć, znajduje się w kolumnie G, użyj pola: = 7 – dendarii

+0

Ups, prawda jesteś, miałem go na 6 nadal. Jednak nadal nie działa, jeśli filtr znajduje się w innej części arkusza, np. W kolumnie I. Następnie przechodzi test "Nie ma nic", ale ma "Błąd 1004" na linii 'Pole: = 6'' –

0

Właśnie wszedł na prostą poniższy kod w module i to działało w porządku dla mnie. Będziesz chciał zmienić zakres i pole danych, aby dopasować je do danych. Oczyszczam filtr z danymi w kolumnach od A do M. Pole 8 to kolumna H.

ActiveSheet.Range("$A:$M").AutoFilter Field:=8