programar - Excel 2013 VBA Borrar todos los filtros macro
vba for mac (18)
Aquí está el delineador que uso. Comprueba si hay un filtro automático y, si lo encuentra, lo elimina.
A diferencia de algunas respuestas, este código no creará un filtro automático si se usa en una hoja de trabajo que no se filtra automáticamente en primer lugar.
Range("A1:Z1").Activate
ActiveSheet.ShowAllData
Range("R1:Y1").Activate
ActiveSheet.ShowAllData
Parece que las macros antiguas no funcionan. Tengo la seguridad adecuada configurada para ejecutar macros de VBA, pero cuando he probado algunos métodos para borrar TODOS los filtros en una hoja de trabajo, obtengo un error de compilación.
Esto es lo que he intentado:
Sub Macro1()
Cells.AutoFilter
End Sub
Tengo botones en las hojas para borrar todos los filtros y facilitar su uso a los usuarios, ya que las hojas tienen muchas columnas con filtros.
Aquí hay un código para la fijación de filtros. Por ejemplo, si activa los filtros en su hoja, agrega una columna y luego desea que la nueva columna también esté cubierta por un filtro.
Sub ResetWSFilters(ws as worksheet)
If ws.FilterMode Then
ws.ShowAllData
Else
End If
''This gets rid of "normal" filters - but tables will remain filtered
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
''And this gets rid of table filters
End Sub
Encontré esta respuesta en una página web de Microsoft
Utiliza el AutoFilterMode como un booleano.
If Worksheets("Sheet1").AutoFilterMode Then Selection.AutoFilter
Encontré esta solución para que funcione de manera bastante efectiva. Básicamente, elimina el autofiltro de la tabla y luego vuelve a aplicarlo, eliminando así cualquier filtro anterior. Desde mi experiencia, esto no es propenso al manejo de errores requerido con los otros métodos mencionados aquí.
Sub AutoFilter_Remove()
Sheet1.AutoFilterMode = False ''Change Sheet1 to the relevant sheet
''Alternatively: Worksheets("[Your Sheet Name]").AutoFilterMode = False
End Sub
Eso es brillante, la única respuesta que encontré que satisfizo mi necesidad particular, ¡muchas gracias por soportarlo!
Hice solo una pequeña adición para que la pantalla no parpadeara y quita y, posteriormente, vuelve a aplicar la contraseña en cada hoja a medida que avanza [Tengo la misma contraseña para todas las hojas del libro de trabajo]. En el espíritu de su presentación, agrego esto para ayudar a otros ...
Sub ResetFilters()
On Error Resume Next
For Each wrksheet In ActiveWorkbook.Worksheets
wrksheet.ShowAllData ''This works for filtered data not in a table
For Each lstobj In wrksheet.ListObjects
If lstobj.ShowAutoFilter Then
lstobj.Range.AutoFilter ''Clear filters from a table
lstobj.Range.AutoFilter ''Add the filters back to the table
End If
Next ''Check next worksheet in the workbook
Next
End Sub
Sé que esta es una publicación relativamente antigua y realmente no me gusta ser un nigromante ... Pero como tuve el mismo problema e intenté algunas de las opciones en este hilo sin éxito, combiné algunas de las respuestas para obtener una macro funcional. ..
Espero que esto ayude a alguien por ahí :)
For Each WS In ActiveWorkbook.Worksheets
Select Case WS.Name
Case "01", "02", "03", "04", "05"
With WS
If WS.AutoFilterMode Then
If WS.FilterMode Then WS.ShowAllData
End If
'' Processing data
End With
Case Else
'' Nothing to see here
End Select
Next
Este hilo es antiguo, pero no estaba contento con ninguna de las respuestas dadas, y terminé escribiendo el mío. Lo estoy compartiendo ahora:
Comenzamos con:
Sub ResetAllWBFilters(wb as workbook)
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
''This removes "normal" filters in the workbook - however, it doesn''t remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
''And this removes table filters. You need both aspects to make it work.
End Sub
Podemos enviar una hoja de trabajo específica a esta macro que filtrará solo esa hoja de trabajo. Útil si necesita asegurarse de que solo una hoja de trabajo esté clara. Sin embargo, generalmente quiero hacer todo el libro de trabajo
Sub ExampleOpen()
Set TestingWorkBook = Workbooks.Open("C:/Intel/......") ''The .open is assuming you need to open the workbook in question - different procedure if it''s already open
Call ResetAllWBFilters(TestingWorkBook)
End Sub
Puede usar esto, por ejemplo, abriendo un libro de trabajo que necesita para tratar y restablecer sus filtros antes de hacer algo con él:
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
Set wb = ThisWorkbook
''Set wb = ActiveWorkbook
''This is if you place the macro in your personal wb to be able to reset the filters on any wb you''re currently working on. Remove the set wb = thisworkbook if that''s what you need
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
''This removes "normal" filters in the workbook - however, it doesn''t remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
''And this removes table filters. You need both aspects to make it work.
End Sub
El que uso más: restablecer todos los filtros en el libro en el que está almacenado el módulo:
If Worksheets("Sheet1").AutoFilterMode Then Selection.AutoFilter
Esto primero comprobará si AutoFilterMode está configurado (el filtrado es posible), luego verificará si FilterMode está activado (está filtrando algo) y luego desactivará el filtrado.
En cuanto a errores, es decir, protección - se otras respuestas
Contexto agregado (mi script se mueve en bucle sobre las hojas, que luego se guardan como CSV, de ahí la necesidad de eliminar filtros, pero mantenga AutoFilterMode activado, si está configurado:
Sub ClearDataFilters()
''Clears filters on the activesheet. Will not clear filters if the sheet is protected.
On Error GoTo Protection
If ActiveWorkbook.ActiveSheet.FilterMode Or _
ActiveWorkbook.ActiveSheet.AutoFilterMode Then _
ActiveWorkbook.ActiveSheet.ShowAllData
Exit Sub
Protection:
If Err.Number = 1004 And Err.Description = _
"ShowAllData method of Worksheet class failed" Then
MsgBox "Unable to Clear Filters. This could be due to protection on the sheet.", _
vbInformation
End If
End Sub
Esto también funcionará:
Sub ClearFilters()
Application.ScreenUpdating = False
On Error Resume Next
For Each wrksheet In ActiveWorkbook.Worksheets
''Change the password to whatever is required
wrksheet.Unprotect Password:="Albuterol1"
wrksheet.ShowAllData ''This works for filtered data not in a table
For Each lstobj In wrksheet.ListObjects
If lstobj.ShowAutoFilter Then
lstobj.Range.AutoFilter ''Clear filters from a table
lstobj.Range.AutoFilter ''Add the filters back to the table
End If
''Change the password to whatever is required
wrksheet.Protect Password:="Albuterol1", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowFiltering:=True
Next ''Check next worksheet in the workbook
Next
Application.ScreenUpdating = True
End Sub
Estoy usando .filtermode
si el filtro está en él devuelve verdadero
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In ActiveWorkbook.Worksheets
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next ws
End Sub
Para tablas intente esto para verificar si está encendido y apagado:
wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
Para volver a encender:
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Prueba esto:
Private Sub AddOrFixFilters()
ActiveSheet.UsedRange.Select
'' turn off filters if on, which forces a reset in case some columns weren''t covered by the filter
If ActiveSheet.AutoFilterMode Then
Selection.AutoFilter
End If
'' turn filters back on, auto-calculating the new columns to filter
Selection.AutoFilter
End Sub
Este Código borra todos los filtros y elimina la clasificación.
Fuente: eliminación de filtros para cada tabla en un libro de trabajo, VBA
Prueba esto:
Sub ResetFilters()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
Pruebe algo como esto:
If Cells.AutoFilter Then Cells.AutoFilter
.FilterMode
devuelve verdadero si la hoja de cálculo está en modo de filtro. ( Consulte esto para obtener más información).
Consulte esto para obtener más información sobre .AutoFilter
.
Y finalmente, this proporcionará más información sobre el método .ShowAllData
.
ShowAllData arrojará un error si un filtro no se aplica actualmente. Esto funcionará:
If wrkSheetCodeName.ListObjects("TableName").ShowAutoFilter Then
wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
End if
Si la hoja ya tiene un filtro, entonces:
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
lo eliminará
Simplemente active los encabezados del filtro y ejecute showalldata, funciona al 100%. Algo como:
Dim returnValue As Boolean
returnValue = worksheet1.FilterMode
if returnValue Then
worksheet1.ShowAllData
End If
Si tiene los encabezados de campo en A1: Z1 y R1: Y1 respectivamente.
Usualmente uso este código
If ActiveSheet.FilterMode Then
cells.AutoFilter
End If
esto funciona bien.!
Set myTable = YOUR_SHEET.ListObjects("YourTableName")
myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True