xlfiltervalues usar off multiple macro como activate excel vba autofilter

excel - usar - El método ShowAllData de la clase Worksheet falló



vba autofilter off (4)

Acabo de experimentar el mismo problema. Después de un poco de prueba y error, descubrí que si la selección estaba a la derecha de mi área de filtro Y el número de registros mostrados era cero, ShowAllData fracasaría .

Un poco más de contexto es probablemente relevante. Tengo varias hojas, cada una con un filtro. Me gustaría configurar algunos filtros estándar en todas las hojas, por lo tanto, uso algunos VBA como este

Sheets("Server").Select col = Range("1:1").Find("In Selected SLA").Column ActiveSheet.ListObjects("Srv").Range.AutoFilter Field:=col, Criteria1:="TRUE"

Este código ajustará el filtro en la columna con el encabezado "En el SLA seleccionado", y no modificará el resto de los filtros. Esto tiene el desafortunado efecto secundario de que puedo crear un filtro que muestra cero registros. Esto no es posible solo con la interfaz de usuario.

Para evitar esa situación, me gustaría restablecer todos los filtros antes de aplicar el filtro anterior. Mi código de reinicio se veía así

Sheets("Server").Select If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

Tenga en cuenta que no moví la celda seleccionada. Si la selección fuera a la derecha, no eliminaría los filtros, permitiendo así que el código de filtro genere un filtro de fila cero. La segunda vez que se ejecuta el código (en un filtro de fila cero) ShowAllData fallará.

La solución alternativa es simple: mueva la selección dentro de las columnas del filtro antes de llamar a ShowAllData.

Application.Goto (Sheets("Server").Range("A1")) If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

Esto fue en la versión de Excel 14.0.7128.5000 (32 bits) = Office 2010

Noto que mi script VBA no funciona cuando ya hay un filtro automático activado. ¿Alguna idea de por qué es esto?

wbk.Activate Set Criteria = Sheets("Sheet1").Cells(i, 1) Set rng = Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 4)) wb.Activate If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData ''remove autofilter, but it crashes on this line Selection.AutoFilter Range("$A$1:$BM$204").AutoFilter Field:=2, Criteria1:=Criteria.Value rng.Copy Range("$BC$2:$BE$204").SpecialCells(xlCellTypeVisible).PasteSpecial

Muchas gracias


AutoFilterMode será True si está activado, independientemente de si realmente hay un filtro aplicado a una columna específica o no. Cuando esto sucede, ActiveSheet.ShowAllData seguirá ejecutándose, lanzando un error (porque no hay un filtro real).

Tuve el mismo problema y lo hice trabajar con

If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If

Esto parece impedir que se ejecute ShowAllData cuando no hay un filtro real aplicado pero con AutoFilterMode activado.

La segunda captura Or ActiveSheet.FilterMode debería capturar filtros avanzados


El ShowAllData method of Worksheet class failed Error de ShowAllData method of Worksheet class failed generalmente cuando intenta eliminar un filtro aplicado cuando no hay uno aplicado.

No estoy seguro de si está tratando de eliminar todo el AutoFilter , o simplemente eliminar cualquier filtro aplicado, pero hay diferentes enfoques para cada uno.

Para eliminar un filtro aplicado, pero deje AutoFilter :

If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If

La razón detrás del código anterior es probar que hay un AutoFilter o si se ha aplicado un filtro (esto también eliminará los filtros avanzados).

Para eliminar completamente el AutoFilter :

ActiveSheet.AutoFilterMode = False

En el caso anterior, simplemente está desactivando completamente el AutoFilter .


La forma más simple de evitar esto es no usar el método de la hoja de trabajo ShowAllData

Autofilter tiene el mismo método ShowAllData que no arroja un error cuando el filtro está habilitado pero no se establece ningún filtro

If ActiveSheet.AutoFilterMode Then ActiveSheet. AutoFilter .ShowAllData