Desculpe, representante insuficiente para comentar. (Admins, sinta-se à vontade para cortar isto num comentário acima.) Resposta do utilizador “danicotra” começando com “Eu uso um VBA/Macro baseado na folha de trabalho_Alterar evento também, mas a minha abordagem…” com 
‘ primeiro remover filtro 
’ depois aplicá-lo novamente 
é a solução correcta quando se usa Excel 2007+. Contudo .AutoFilter.ApplyFilter é inválido em XL03 e antes, por isso mostro o caminho abaixo. 
& imploro que os verdadeiros peritos e gurus leiam o código porque estou bastante confiante de que é material de prateleira superior. Talvez a inexplicável contagem decrescente desta resposta possa ser invertida quando as pessoas virem o que de bom é feito abaixo. 
danicotra utilizou um exemplo simplificado. Na verdade, pode fazer isto de forma mais geral. Assumir com ActiveSheet para o seguinte (ou algum outro objecto de folha): 
- Guardar o intervalo do autofiltro. Tem colunas .AutoFilter.Filters.Count, e linhas (.AutoFilter.Range.Count/.AutoFilter.Filters.Count), guardadas em rngAutofilter  
- Recolher numa matriz myAutofilters cada uma das 4 propriedades de cada um dos .AutoFilter.Filters.Count autofilter Items, tendo o cuidado de evitar “erros definidos pela aplicação” quando .On ou .Operator é falso. (myAutofilters seria reDim’d para o número de linhas e colunas no passo 1)  
- Desligar o filtro mas preservar os dropdowns com .ShowAllData  
- Para cada item de filtro que estava .On de acordo com a sua matriz guardada, reinicie 3 das 4 propriedades de cada um dos .AutoFilter.Filters.Count autofilter Items. Mais uma vez tenha cuidado para evitar “Erros definidos pela aplicação” quando o .Operator for falso, por isso para cada item “i”, 
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i,2) 
ou 
rngAutofilter. Campo AutoFilter:=i, Critério1:=myAutofilters(i,2), Operador:=myAutofilters(i,3), Critério2:=myAutofilters(i,4)  
Agora o autofiltro será reinstituído, no mesmo intervalo que era antes do seu código começar, mas com o autofiltro actualizado para alterações nos dados. 
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