** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Evento AlAplicarFiltro, ApplyType no funciona
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEvento AlAplicarFiltro, ApplyType no funciona

 Responder Responder
Autor
Mensaje
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Tema: Evento AlAplicarFiltro, ApplyType no funciona
    Enviado: 31/Octubre/2023 a las 14:51

Hola, buscando por internet, veo que existe la manera de detectar cuándo se quita el filtro en el Evento Al Aplicar Filtro, lo he probado pero no funciona.

En mi caso, es un subformulario  (aunque si lo abro directamente y filtro tampoco funciona). Los filtros y quitar los filtros los hago de manera access, es decir con las flechitas, no paso ningún código. Solo quiero que, ya que access detecta cuándo se filtra, también cuando se quita el fitro porque quiero se muestre en la barra de estado el filtro o lo limpie si no hay filtro.

Pero como este evento ciertamente salta antes de aplicar el filtro, según dice la ayuda de access, cuando yo lo ejecuto quitando el filtro, veo que Me.Filter sigue con el valor del filtro (anterior)

Sin embargo este código aparece en varios sitios, debe funcionar y yo perderme en algo:

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Dim variantBar As Variant
    
If ApplyType = acApplyFilter Then 'Filtro normal de access
      variantBar = SysCmd(acSysCmdSetStatus, Me.Filter)
ElseIf ApplyType = acShowAllRecords Then 'Mostrar todos los registros, es decir no hay filtro
   Me.Filter = ""
   variantBar = SysCmd(acSysCmdSetStatus, " ")
End If

Gracias

Saludos
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 31/Octubre/2023 a las 15:08
Nunca había usado esto ... pero por lo que veo, cuando aplicas el filtro ApplType vale 1 y cuando lo quitas vale 0.
De todas formas comprueba los valores que tema colocando un punto de interrupción.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 31/Octubre/2023 a las 15:22

Nada :( 

El valor 1 lo toma cuando aplico filtro y cuando lo quito, tanto si lo quito desde la flechita de la columna filtrada pulsando "borrar filtro" como si pulso "Alternar filtro", para quitar el filtro.

Pongo este MsgBox ApplyType en el Evento siempre me devuelve 1


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 31/Octubre/2023 a las 15:34
¿Y pulsando quitar filtro?

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1536
Enlace directo a este mensaje Enviado: 31/Octubre/2023 a las 19:29
En ese formulario/subformulario, ¿tienes un filtro ajeno a los botones que estás pulsando? ¿algo como que filtras el formulario al abrir, le pasas un filtro en el OpenForm, o similar?

He puesto esto en un formulario:

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
    MsgBox "ApplyType está " & IIf(ApplyType, "activado", "desactivado") & vbCrLf & _
        "El filtro es: " & Me.Filter & vbCrLf & _
        "El formulario tiene el filtro " & IIf(Me.FilterOn, "activado", "desactivado")
End Sub

Y con los botones me cambia el estado de ApplyType. Sólo he conseguido que me mantenga el 1 (activado), si en el diseño dejo un filtro y el FilterOn activado. Al abrir, mientras filtro o alterno con otros campos que no están en el filtro guardado en el diseño, sí que me mantiene el ApplyType a 1; aunque en la segunda línea del MsgBox me aparece el filtro guardado. En cuanto elimino ese filtro, ya vuelvo al cambio 1 <-> 0.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 01/Noviembre/2023 a las 22:30

Hola! muchas gracias a los dos por responder. Mihura, yo creía que estaba pulsando todas las opciones para quitar el filtro, pero no sé muy bien por qué, con lo que me ha puesto pitxiku, acabo de pulsar "Borrar filtro de.." en la columna filtrada y aunque sigue diciendo que el filtro está activado, ahora Me.Filter sale vacío y de ahí puedo tirar para armar el código.

pitxiku,  muuuchas gracias. No tengo ningún filtro al abrir, solo ordeno algunas columnas. Pero es increíble porque a mí Me.Filter antes me salía con el filtro anterior y con la constante de filtro aplicado, y sin embargo ahora por lo menos Filter sale limpio y de ahí puedo decirle que vacíe la barra de estado.

De verdad que creía que pulsaba "Borrar filtro de.." pero algo estaba haciendo mal. O no estaba poniendo bien el código o no quitaba bien el filtro!!! :) 

Dim variantBar As Variant
Dim strFiltroBar As String
strFiltroBar = Me.Filter

If Me.Filter <> "" Then
    strFiltroBar = Replace(strFiltroBar, "[tabla1].", "")
    strFiltroBar = Replace(strFiltroBar, "(((", "(")
    strFiltroBar = Replace(strFiltroBar, ")))", ")")
    strFiltroBar = Replace(strFiltroBar, "AND", "And")
      variantBar = SysCmd(acSysCmdSetStatus, strFiltroBar)
Else
   variantBar = SysCmd(acSysCmdSetStatus, " ")
End If


Genial!! muchas gracias, pueden cerrar el hilo.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 02/Noviembre/2023 a las 00:07

Hola de nuevo. Al final he conseguido controlar "Alternar filtro" y limpiar también la barra de estado si lo he pulsado. Os paso lo que hecho.

Declaro strFiltroBar2 en el módulo del formulario que va a recoger el filtro y así va a mantener su valor anterior. 

Dim strFiltroBar2 As String
 
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Dim variantBar As Variant
Dim strFiltroBar As String
strFiltroBar = Me.Filter

If Me.Filter <> "" Then
   'strFiltroBar2 toma el valor de Me.Filter al final de la condición, por lo que si se filtra un campo, la variable strFiltroBar2 todavía está vacía y será distinta de Me.Filter
   If strFiltroBar2 <> Me.Filter Then
         strFiltroBar = Replace(strFiltroBar, "[Tabla1].", "")
         strFiltroBar = Replace(strFiltroBar, "(((", "(")
         strFiltroBar = Replace(strFiltroBar, ")))", ")")
         strFiltroBar = Replace(strFiltroBar, "AND", "And")
         variantBar = SysCmd(acSysCmdSetStatus, strFiltroBar)
         strFiltroBar2 = Me.Filter
         Exit Sub
       End If
   'Alternar filtro (Si se pulsa "Alternar filtro" para volver al estado inicial sin el filtrado, tiene la condición que aún así se conserva el filtro anterior, por lo que strFiltroBar2 coincide con el filtro)
   Else
      variantBar = SysCmd(acSysCmdSetStatus, " ")
      strFiltroBar2 = ""
   End If
Else 'Al pulsar "Borrar filtro de..." Si se pulsa Alternar filtro no funciona aquí
   variantBar = SysCmd(acSysCmdSetStatus, " ")
   strFiltroBar2 = ""
End If


Saludos!
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 28/Diciembre/2023 a las 19:27

PUeden cerrar el hilo xfavor, gracias.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable