Crear un filtro de búsqueda en la cabecera de un formulario continuo usando VBA

filtro-cabecera-formulario

Escrito por Administrador

2 de diciembre de 2021

Hoy vamos a ver cómo crear un filtro de búsqueda en la cabecera de un formulario continuo usando VBA.

Como sabéis, en los formularios continuos, se muestran todos los registros de una tabla, por lo que, a veces, es necesario poder filtrarlos para visualizar sólo la información necesaria.

En el ejemplo (adjunto al final del post) encontraréis dos tablas y un formulario.

Las tablas "Clientes" y "Expedientes", se encuentran relacionadas entre sí a través del campo "DNI". Es decir, un expediente está asociado a un DNI de un cliente.

bloquear-access-fecha
bloquear-access-fecha

El formulario "Lista de expedientes", muestra todos los registros de la tabla "Expedientes" con información relacionada de la tabla "Clientes".

Si te fijas, en la cabecera del formulario hay dos desplegables en los campos "Prioridad" y "Estado", que usaremos para seleccionar entre las distintas opciones de cada uno de ellos.

Vamos a usar VBA para que solo se muestren los registros que cumplan lo seleccionado en uno o en ambos desplegables.

bloquear-access-fecha

A continuación, os muestro el código a introducir en cada desplegable,

Private Sub Prioridadfiltro_AfterUpdate()

Dim vPrioridad As String
Dim vEstado As String

Dim vLargo As Integer
Dim miFiltro As String

'Cogemos los valores que hayamos seleccionado como filtro

vPrioridad = Nz(Me.Prioridadfiltro.Value, "")
vEstado = Nz(Me.Estadofiltro.Value, "")

'Inicilizamos el filtro

miFiltro = ""

'Creamos la primera parte del filtro

If vPrioridad <> "" Then
miFiltro = miFiltro & " AND [Prioridad]='" & vPrioridad & "'"
End If

'Creamos la segunda parte del filtro

If vEstado <> "" Then
miFiltro = miFiltro & " AND [Estado]='" & vEstado & "'"
End If

'Ahora cogemos la longitud del filtro

vLargo = Len(miFiltro)

'Recomponemos el filtro eliminando el primer 'AND '

If vLargo > 0 Then
miFiltro = Right(miFiltro, vLargo - 4)
End If

'Aplicamos el filtro al formulario

Me.Filter = miFiltro
Me.FilterOn = True

End Sub

Private Sub Estadofiltro_AfterUpdate()

Dim vPrioridad As String
Dim vEstado As String

Dim vLargo As Integer
Dim miFiltro As String

'Cogemos los valores que hayamos seleccionado como filtro

vPrioridad = Nz(Me.Prioridadfiltro.Value, "")
vEstado = Nz(Me.Estadofiltro.Value, "")

'Inicilizamos el filtro

miFiltro = ""

'Creamos la primera parte del filtro

If vPrioridad <> "" Then
miFiltro = miFiltro & " AND [Prioridad]='" & vPrioridad & "'"
End If

'Creamos la segunda parte del filtro

If vEstado <> "" Then
miFiltro = miFiltro & " AND [Estado]='" & vEstado & "'"
End If

'Ahora cogemos la longitud del filtro

vLargo = Len(miFiltro)

'Recomponemos el filtro eliminando el primer 'AND '

If vLargo > 0 Then
miFiltro = Right(miFiltro, vLargo - 4)
End If

'Aplicamos el filtro al formulario

Me.Filter = miFiltro
Me.FilterOn = True

End Sub

En primer lugar, el código guarda en variables el contenido de los campos desplegables.

A continuación, comprueba que los desplegables no estén vacíos y, en ese caso, va introduciendo en la variable miFiltro el contenido de los mismos.

Finalmente, aplica el filtro al formulario continuo, manteniéndose solo aquellos registros que cumplen con lo seleccionado.

Vamos a continuar con el ejemplo para verlo en práctica. No obstante, si tienes cualquier tipo de duda, déjala en los comentarios, y la contestaré tan pronto como pueda.

Por ejemplo, si seleccionamos en el desplegable "Prioridad" la opción Normal, vemos cómo desaparece el registro de prioridad alta.

bloquear-access-fecha

Además, vamos a seleccionar en el campo "Estado" la opción Finalizada, con lo que sólo nos quedarán dos registros.

Éstos, cumplen las dos selecciones realizadas; Prioridad normal y estado finalizado.

bloquear-access-fecha

Espero que hayas aprendido con este ejemplo cómo crear un filtro de búsqueda en la cabecera de un formulario continuo usando VBA.

Hasta la próxima.

Descarga el archivo del ejemplo

Por favor, ayúdame y haz clic en el anuncio. Solo te lleva un segundo 😉

 


0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto