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