Filtrar registros a través de una Casilla de Verificación

Me estoy volviendo un poco loco y necesito vuestra ayuda... Tengo un formulario con una serie de campos asociados a una única tabla. Al lado de cada campo me gustaría tener una Casilla de Verificación, que al hacer click, me filtre y muestre unicamente los registros coincidentes con el texto que haya en dicha casilla de texto en el momento de hacer click en dicha casilla de verificación. Me gustaría saber el código de la macro al hacer click para poder conseguirlo. Actualmente tengo [DATOS GENERALES]![GERENCIA]=Nombre. Esto me permite que cuando hago Click en la casilla que cree al lado del Campo GERENCIA, me sale una ventanita donde al escribir el nombre de la Gerencia me filtra y muestra los registros que quiero; pero claro a mi me gustaría que simplemente con hacer click me filtre directamente por el dato que aparezca en ese momento en el campo GERENCIA. No se si me he explicado...

1 respuesta

Respuesta
1

En principio pienso el problema es porque estás cogiendo una variable llamada "Nombre" que no existe y por eso te aparece la ventanita para que tu pongas "el nombre"

Solucionar esto, es fácil:

Si tienes un campo llamado "Gerencia" en el formulario tendrás que cambiar el código por el siguiente que te propongo:

Filtro = [DATOS GENERALES]![GERENCIA] = Me.Gerencia

Esto hace que el filtro se establezca con el valor existente en el campo del formulario llamado "Gerencia".

Después, solo tienes que establecer el filtro en el formulario y activarlo... algo así como esto:

Me.Filter = Filtro

Me.FilterOn =True

Y creo que con esto estará todo resuelto...

Muchas gracias por tu pronta respuesta pero tengo una duda...entiendo que tengo que ir a las propiedades de la casilla de verificación-Eventos-Al hacer clic...ahí selecciono generar código...y que código concreto pondría...muchas gracias y disculpa por mi torpeza

He cambiado el código y me sigue solicitando un valor en un cuadro emergente...por otro lado como hago para establecer el filtro y activarlo...:

Me.Filter = Filtro
Me.FilterOn =True

Gracias gomzky


Si te solicita un valor con un cuadro emergente, significa que no está encontrando el valor en el formulario de pantalla...

En la mayoría de los casos, esto es porque el nombre del campo está mal escrito o no es el que tu pones... Asegurate que el campo "Gerencia" existe en el formulario.

Otra cosa que también complica mucho las cosas, es que el campo de pantalla y el campo de la tabla se llamen igual.- Cambia el nombre del campo en el formulario y llamalo xGerencia (por ejemplo)

Entonces, tal y como comentas, en el evento "al Hacer Click" del cuadro de verificación, escribes el siguiente código:

Dim Filtro as String

Filtro = [DATOS GENERALES]![GERENCIA] = Me.xGerencia

Me.Filter = Filtro 'Asigna el filtro al formulario
Me.FilterOn =True 'Activa el filtro

Y con esto, debe quedar todo resuelto... si sigue preguntando por el campo gerencia (o Xgerencia en este caso), es porque no existe o no lo tienes bien definido en el formulario...

Algo debo estar haciendo mal...He modificado el nombre del campo en el formulario ya que efectivamente tenia el mismo de la tabla. He copiado el código tal cual según te indico:

Private Sub Verificación294_Click()
Dim Filtro As String
Filtro = [DATOS GENERALES]![GERENCIA] = Me.xGerencia
Me.Filter = Filtro
Me.FilterOn = True
End Sub

Esto es lo que veo en la pantalla de código...es correcto??

Me da error: No encuentra el campo '|1' al que se hace referencia en la expresión:

Filtro = [DATOS GENERALES]![GERENCIA] = Me.xGerencia

Que puede ser???.Muchas gracias

OK, creo que ya sé dónde está el error... El filtro tienes que ponerlo entre comillas,

Te reescribo el código corregido:

Private Sub Verificación294_Click()
Dim Filtro As String
Filtro = "[DATOS GENERALES]![GERENCIA] = " & Me.xGerencia
Me.Filter = Filtro
Me.FilterOn = True
End Sub

Esto funcionará bien siempre y cuando el campo "Gerencia" de la base de datos sea numérico; Si lo tienes como alfanumérico, debes cambiarlo por algo como esto:

Filtro = "[DATOS GENERALES]![GERENCIA] = " & "'" & Me.xGerencia & "'"

(Comillas dobles-comilla simple-comillas dobles) -Esto es necesario para que el código resultante quede algo así como esto:

[DATOS GENERALES]![GERENCIA] = '1'

Pruébalo con estas nuevas condiciones y me cuentas...

Ahora si que si creo...pero simplemente y ya para terminar que código pongo para que al quitar el click vuelva al estado normal sin filtrar. Actualmente cuando aplico me filtra de maravilla pero al des-clickear me sigue conservando los registros seleccionados.

MUCHÍSIMAS GRACIAS DE VERDAD ME HAS RESUELTO MI PROBLEMA QUE ME TENIA LOCO...

El código completo sería este:

Private Sub Verificación294_Click()

If Me.Verificación294 =True then 'Si la casilla esta marcada

Dim Filtro As String
Filtro = "[DATOS GENERALES]![GERENCIA] = " & Me.xGerencia
Me.Filter = Filtro
Me.FilterOn = True

Else 'Si no está marcada

Filtro = "[DATOS GENERALES]![GERENCIA] = " & Null 'Anula el filtro
Me.Filter = Filtro 'Aplica el filtro (lo borra en este caso)
Me.FilterOn = False 'Impide que se aplique el filtro

End if
End Sub

Solo me queda una observación para que tengas en cuenta en un futuro: Cuidado con los nombres de campos acentuados.- En este caso, tienes "Verificación" con acento.- Si lo escribieses sin acento, no funcionaría y podrías volverte loco para descubrir cuál es el problema... En programación, nunca se utilizan acentos; Si los pone el Access automaticamente, hay que quitarlos.

Un saludo; Me alegro de haber sido de ayuda...

MUCHAS GRACIAS POR TU INESTIMABLE AYUDA. Tu profesionalidad y dedicación buenísimo. Te felicito.

p/d: le quite simplemente de la segunda parte del código Me.Filter = Filtro y funciona de maravilla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas