2013-07-31 42 views
5

Grazie per essere venuto a questa discussione.Excel VBA: come filtrare solo un intervallo di filtro automatico alla volta? Codice fornito

Quello che ho:

rapporto -A con un filtro automatico su file A: G

Che cosa ho bisogno:

codice -Circumstantial che unfilters una colonna specifica se c'è un filtro su di esso.

-Inseguendo il mio codice sotto l'intera gamma di A: G.

-In questo caso, voglio solo "F" non filtrato, lasciando altri filtri da solo se vengono filtrati.

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

Tutte le idee sono molto apprezzate! Grazie mille!

+0

il codice sia bene a me, ho anche provato e quando ho provato lo fa esattamente come chiedete, rimuove il filtro automatico dal campo singolo. – user2140261

+0

Quando eseguo il codice rimuove completamente il filtro automatico. – dendarii

+0

Tuttavia, rimuove anche altri campi che sono già stati filtrati. Quindi il filtro automatico verrà ripristinato nelle colonne B e C se vengono filtrati. In realtà ho risposto alla mia domanda, ma non ho abbastanza rep per rispondere. Ecco il codice: Addr = Split (ActiveSheet.UsedRange.Address, "$") lastRow = Addr (UBound (Addr)) Per r = lastRow a 1 Step -1 Se Len (celle (r, "A") .Valore) Quindi lastRow = r Exit For End If Avanti ActiveSheet.Range ("$ A $ 1: $ G" e lastRow).Campo filtro automatico: = 6 –

risposta

6

Prova questo:

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 

Questa riga nel codice:

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

... si trasforma in realtà fuori il filtraggio per l'intero foglio. Invece i miei assegni di codice se il foglio è filtrata con:

If .AutoFilterMode = True Then 

E poi controlla se il filtro include colonna G con:

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

ho fatto un paio di modifiche per rendere il codice un po 'più flessibile . Abilita Intellisense anche per l'oggetto ws, che è utile. (Ho sempre trovato le varie Filter proprietà -related e metodi di confusione, soprattutto senza auto-completamento.)

1

Questo ha funzionato per me

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

Non funziona per me. Nulla cambia quando viene eseguito. Ho un filtro su un'altra colonna e su G. –

+0

Se il filtro che vuoi rimuovere è sulla colonna G, usa Campo: = 7 – dendarii

+0

Oops, giusto sei, l'ho avuto su 6 ancora. Tuttavia, fallisce ancora se il filtro si trova su un'altra parte del foglio, ad esempio, colonna I. Quindi passa il test 'Not is Nothing', ma ha un' Errore 1004' nella riga 'Field: = 6'' –

0

ho appena inserito il codice semplice di seguito nel modulo ed ha funzionato benissimo per me. Dovrai modificare l'intervallo e il campo di dati per abbinare i tuoi dati. Sto eliminazione di un filtro con i dati in colonne da A a M. Il campo 8 è colonna H.

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