for - vba excel 2016
Filtro activo transparente Excel 2013 VBA (3)
Necesito borrar cualquier filtro activo de una hoja antes de ejecutar una macro determinada, esta línea funciona bien SI hay un filtro activo en
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
Sin embargo, si no se seleccionan filtros, devuelve el error
Runtime error ''1004'';
ShowAllData method of Worksheet class failed
Obtuve el código de una respuesta a esta pregunta Excel 2013 VBA Borrar todos los filtros macro
Sin embargo, esa pregunta no explica cómo ignorar la línea si no hay filtros activos.
¿Cómo ignoro esta línea si no hay filtros activos actualmente aplicados?
EDITAR
Por ejemplo, todos los encabezados de columna se filtraron automáticamente, por lo que si mi hoja está filtrada por ''Mujer'', por ejemplo, necesito eliminar ese filtro antes de ejecutar la macro; sin embargo, si no se han aplicado filtros, simplemente ejecute la macro como siempre.
Sinceramente admiro su deseo de programar para circunstancias específicas, pero tengo que admitir que la forma más rápida de lograr esto es mediante On Error Resume Next
.
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
No debería tener que romper algo para comprobar si existe, pero en VBA que ocasionalmente es el mejor recurso. Personalmente, clasifico On Error Resume Next
junto con SendKeys
como método de programación.
El método anterior no requiere que compruebe si. .AutoFilterMode
es verdadero .
Use FilterMode en lugar de AutoFilterMode. He tratado con filtros con frecuencia y este código funciona bien.
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
Asegúrese de que la hoja de cálculo no esté protegida, ya que esto también genera el error 1004.
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í :)
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
** Posible duplicado de hilo: Excel 2013 VBA Borrar todos los filtros Macro