# FIltro avanzado elimina autofiltro



## Caliche (Feb 2, 2005)

Ya he colocado esta pregunta en el foro en inglés, pero desafortunadamente no he obtenido respuesta aún. Acá va:

Este es un pedazo de mi código: 

MsgBox ("Antes de filtro avanzado" & Worksheets("Datos").AutoFilterMode) 

Range("'Coaching.xls'!Datos").AdvancedFilter Action:=xlFilterCopy, _ 
CriteriaRange:=Range("'Coaching.xls'!Crit_Filtro"), _ 
CopyToRange:=Selection, Unique:=True 

MsgBox ("Después del filtro avanzado" & Worksheets("Datos").AutoFilterMode) 

Antes del filtro avanzado, la hoja Datos muestra "Verdadero" ó sea  que está activo el auto filtro (*Nota*: esta hoja *está protegida*) ; después de que ejecuto el filtro avanzado, los botones del autofiltro ya no aparecen (se desactiva el autofiltro): el msgbox muestra "Falso". 

No hay mas instrucciones entre el msgbox "antes" del filtro avanzado  y el msgbox "después" del filtro avanzado.  

Tener en cuenta que :

- El rango "Datos" es un rango dinámico en la hoja "Datos"; 
- El rango de criterios, "Crit_filtro" esta en otra hoja diferente a la hoja
  donde está el rango (fuente) de datos del filtro avanzado y
- El rango "Copy to" también está en una hoja diferente a las dos
  anteriores. 

Lo anterior significa que intervienen tres hojas diferentes en el filtro avanzado.

Alguna idea de por qué se está desactivando el autofiltro en la hoja fuente de datos para el filtro avanzado?.

Muchas gracias por su ayuda.

Caliche


----------



## Juan Pablo González (Feb 2, 2005)

Juan,

Porque así funciona Excel  . No, en serio... así como no se pueden tener dos autofiltros en una misma hoja, no se puede tener un autofiltro y un filtro avanzado.  Lo que me imagino que tocaría hacer, para no tener que guardar toda la información del filtro actual, sería hacer una copia temporal de los datos, y hacer el filtro avanzado sobre esa copia, así el filtro original no se modifica.


----------



## Caliche (Feb 2, 2005)

Juan:

Lo que yo pretendo es hacer un filtro avanzado con los datos de una hoja que está protegida y que en su fila de encabezados tiene activo un autofiltro, el cual debo conservar para que los usuarios lo puedan utilizar. 

Ensayé lo siguiente:

Manualmente, es decir, desde el menu Datos, Filtro, Filtro Avanzado, teniendo activo el autofiltro, pero sin haber filtrado nada, es decir con TODAS las filas de dato visibles, pude hacer lo que estoy intentando hacer en la macro y se conservan los botones del autofiltro.

Con algún campo filtrado, es decir, con algunas filas ocultas, repetí el filtro avanzado, y permite hacerlo, pero cuando termina, desactiva el autofiltro y muestra todos los registros de mi base de datos.

Que será entonces lo que debo hacer en la macro para evitar esto?. porque en la macro, ya vemos que el msgbox muestra que el autofiltro está activo y estoy seguro que no tengo ningún campo filtrado, que sería la condición que me desactiva el autofiltro, según sucedió cuando lo hice manualmente. Talvez un "Mostrar todo" antes del filtro avanzado, por seguridad?.

Mil gracias por su ayuda. 

Si entiendo bien su respuesta, obviamente uno no puede intentar hacer al mismo tiempo


----------



## Juan Pablo González (Feb 2, 2005)

Hola Juan,

Excel 2000 me "apaga" el autofiltro al hacer un filtro avanzado, así no tenga nada filtrado.  No traté con las otras versiones.

Lo que propongo es algo así.  Con este ejemplo:Book1ABCDEF1Field1Field2Field3Field122220300041115222600071118222900010111Sheet1

Al correr el siguiente macro, el filtro se me apaga:<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> Test()
   Range("A1").CurrentRegion.AutoFilter
   
   Debug.Print Sheet1.AutoFilterMode
   
   Range("A1").CurrentRegion.AdvancedFilter xlFilterCopy, Range("F1:F2"), Range("I1")

   Debug.Print Sheet1.AutoFilterMode<SPAN style="color:#00007F">End</SPAN><SPAN style="color:#00007F">Sub</SPAN></FONT>

lo que digo es crear una hoja temporal, y filtrar ahí:<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> Test2()<SPAN style="color:#00007F">Dim</SPAN> TempWS<SPAN style="color:#00007F">As</SPAN> Worksheet<SPAN style="color:#00007F">Dim</SPAN> ActWS<SPAN style="color:#00007F">As</SPAN> Worksheet<SPAN style="color:#00007F">Set</SPAN> ActWS = Sheet1

   Range("A1").CurrentRegion.AutoFilter

   Debug.Print Sheet1.AutoFilterMode<SPAN style="color:#00007F">Set</SPAN> TempWS = Workbooks.Add(xlWorksheet).Worksheets(1)

   ActWS.Range("A1").CurrentRegion.Copy TempWS.Range("A1")

   TempWS.Range("A1").CurrentRegion.AdvancedFilter xlFilterCopy, _
                                                   ActWS.Range("F1:F2"), _
                                                   ActWS.Range("I1")

   Debug.Print Sheet1.AutoFilterMode

   TempWS.Parent.Close<SPAN style="color:#00007F">False</SPAN><SPAN style="color:#00007F">End</SPAN><SPAN style="color:#00007F">Sub</SPAN></FONT>


----------



## Caliche (Feb 3, 2005)

Juan: muchas gracias. esta solución me puede servir. Creo que la conclusión importante de este problema es saber que el autofiltro "se apaga" después del filtro avanzado, y entonces una solución alterna a su propuesta, sería que la macro lo restaurara después del filtro avanzado.

De nuevo, muchísimas gracias por su ayuda.

Caliche.


----------

