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.
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.
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.
Continuamos con el ejemplo, y vemos el funcionamiento del filtro de cabecera del formulario. 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.
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.
Espero que hayas aprendido con este ejemplo cómo crear un filtro de búsqueda en la cabecera de un formulario continuo usando VBA.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
Últimas publicaciones
0 comentarios