Przepraszamy, niewystarczająca liczba repów, aby skomentować. (Administratorzy, nie krępuj się, aby wyciąć to w komentarzu powyżej.) Odpowiedź użytkownika “danicotra” zaczynająca się od “Używam VBA/Macro opartego na zdarzeniu Worksheet_Change również, ale moje podejście…” z 
‘ najpierw usuń filtr 
’ następnie zastosuj go ponownie 
jest poprawnym rozwiązaniem, gdy używasz programu Excel 2007+. Jednak .AutoFilter.ApplyFilter jest niepoprawny w XL03 i wcześniejszych, więc pokazuję sposób poniżej. 
Błagam, aby prawdziwi eksperci i guru przeczytali ten kod, bo jestem przekonany, że jest to materiał z najwyższej półki. Być może niewytłumaczalna liczba downvote na tę odpowiedź może zostać odwrócona, gdy ludzie zobaczą, jakie dobre rzeczy są robione poniżej. 
danicotra użył uproszczonego przykładu. Właściwie możesz to zrobić bardziej ogólnie. Przyjmij With ActiveSheet dla następującego (lub jakiegoś innego obiektu arkusza): 
- Zapisz zakres autofiltra. Ma on kolumny .AutoFilter.Filters.Count, oraz (.AutoFilter.Range.Count/.AutoFilter.Filters.Count) wiersze, zapisane do rngAutofilter  
- Zbierz w tablicy myAutofilters każdą z 4 właściwości każdego z elementów autofiltru .AutoFilter.Filters.Count, uważając, aby uniknąć “błędów zdefiniowanych przez aplikację”, gdy .On lub .Operator jest fałszywy. (myAutofilters zostałoby reDim’d do liczby wierszy i kolumn w kroku 1)  
- Wyłącz filtr, ale zachowaj elementy rozwijane za pomocą .ShowAllData  
- Dla każdego elementu filtra, który był .On zgodnie z zapisaną tablicą, zresetuj 3 z 4 właściwości każdego z elementów autofiltru .AutoFilter.Filters.Count. Ponownie zwróć uwagę, aby uniknąć “błędów zdefiniowanych przez aplikację”, gdy .Operator jest fałszywy, więc dla każdego elementu “i”, 
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i,2) 
lub 
rngAutofilter. AutoFilter Field:=i, Criteria1:=myAutofilters(i,2), Operator:=myAutofilters(i,3), Criteria2:=myAutofilters(i,4)  
Teraz autofiltr zostanie przywrócony, w tym samym zakresie, w którym był przed rozpoczęciem kodu, ale z autofiltrem zaktualizowanym o zmiany w danych. 
Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
  'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
  'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
  Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
  iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
  If iNumActiveAutofilters < 1 Then
      Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
      Exit Sub
  End If
  ActiveSheet.ShowAllData
  Rem Here optionally do stuff which can include changing data or toggling autofilter columns
  For i = 1 To iNumAutofilters
      If myAutofilters(i, 1) Then
          If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
          Else
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
          End If
          Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
      End If
      'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
  Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
  Dim i As Long, iRowsAutofiltered As Long
  SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
  iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
  If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
  ReDim myAutofilters(1 To iNumAutofilters, 4)
  For i = 1 To iNumAutofilters
      myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
      If myAutofilters(i, 1) Then
          SaveAutoFilterInfo = SaveAutoFilterInfo + 1
          myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
          myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
          If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
              myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
          End If
      End If
  Next i
  iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
  Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function