Si tienes un formulario continuo con muchos registros en Microsoft Access, lo más seguro es que te interese filtrar por múltiples campos a la hora de localizar registros que cumplan un determinado criterio. Esto es justamente lo que vamos a ver hoy. ¡Empecemos!
Lo primero que he hecho es crear una tabla y montar un formulario continuo asociado a la misma,
Como véis, tenemos la posibilidad de filtrar por los campos: Fecha, Importado, Pais, Precio y Departamento, pero no solo de forma individual, si no también de forma simultánea.
Existen cuatro botones,
- Filtro: Realiza el filtrado de registros del formulario continuo en base a los criterios seleccionados.
- Borrar: Restablece el filtro y borrar los campos del mismo.
- Informe: Muestra un informe con la selección de registros actual.
- Salir: Cierra la base de datos.
A continuación, os dejo el código que les acompaña,
Private Sub cmdFiltro_Click()
'Definimos las variables
Dim vPais As String
Dim vPrecio As Currency
Dim vImportado As Variant
Dim vDepartamento As String
Dim vFecha As Variant
Dim vLargo As Integer
Dim miFiltro As String
'Guardamos en las variables la información que se haya rellenado en cada filtro
vPais = Nz(Me.cboPais.Value, "")
vPrecio = Nz(Me.cboPrecio.Value, 0)
vImportado = Nz(Me.chkImportado.Value, "")
vDepartamento = Nz(Me.cboDepartamento.Value, "")
vFecha = Nz(Me.txtFecha.Value, "")
'Inicializamos la variable mifiltro que será la que guarde la combinación de todos los filtros rellenos
miFiltro = ""
'Añadimos al filtro el pais seleccionado
If vPais <> "" Then
miFiltro = "AND [Pais]='" & vPais & "'"
End If
'Añadimos al filtro el precio seleccionado
If vPrecio <> 0 Then
miFiltro = miFiltro & " AND [Precio]=" & vPrecio
End If
'Añadimos al filtro la opción importado seleccionada
If vImportado <> "" Then
miFiltro = miFiltro & " AND [Importado]=" & vImportado
End If
'Añadimos al filtro el departamento seleccionado
If vDepartamento <> "" Then
miFiltro = miFiltro & " AND [Departamento]='" & vDepartamento & "'"
End If
'Añadimos al filtro la fecha seleccionada
If vFecha <> "" Then
miFiltro = miFiltro & " AND [FechCompra]=#" & Format(vFecha, "mm/dd/yyyy") & "#"
End If
'Calculamos la longitud del filtro creado
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 cmdBorrar_Click()
'Deshacemos el filtro y borramos todos los campos del mismo
With Me
.cboPais.Value = Null
.cboDepartamento.Value = Null
.chkImportado.Value = Null
.cboPrecio.Value = Null
.txtFecha.Value = Null
.FilterOn = False
End With
Me.Filter = ""
End Sub
Private Sub cmdInforme_Click()
'Abrimos el informe con los registros filtrados
DoCmd.OpenReport "Informe", acPreview, , Me.Filter
End Sub
Private Sub cmdSalir_Click()
'Cerramos la base de datos
DoCmd.Quit
End Sub
El funcionamiento de la primera macro es muy sencillo. Recorre los campos del filtro buscando cuáles de ellos han sido rellenados y en caso afirmativo, va añadiendo en la variable mifiltro dicha información. Al final del proceso esta variable contendrá el criterio que usará el filtro al ejecutarse el comando Me.FilterON=True.
En el ejemplo, si filtramos los artículos comprados el día 21/08/2022 e importados de China, obtendremos el siguiente resultado,
Si queremos elaborar un informe con dicha información, no tenemos más que pulsar sobre el botón correspondiente,
Si ahora pulsamos el botón Borrar, deshacemos el filtro y se limpian los campos del mismo,
Espero que hayas aprendido a filtrar un formulario usando múltiples campos, y a partir de ahora complementes tus formularios continuos con esta maravillosa herramienta.
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
8 Comentarios
Enviar un comentario
Últimas publicaciones
Hola este código me ha sido muy útil, estoy muy agradecido.
Quisiera consultarles ya que he tratado de adaptar el ejemplo y he fracasado, si me pueden orientar para crear un filtro de la siguiente forma.
Siguiendo el ejemplo, si quisiera obtener todos los registros del campo País que tienen por valor China o EE.UU.
Espero haber sido claro desde ya gracias
Hola Ariel,
Gracias por tus palabras.
Para filtrar por dos valores en un campo, solo tendrás que crear otro campo para introducir el segundo país, y en la línea en la que metes como condición el país, agregar una nueva con OR haciendo referencia al nuevo campo creado.
Espero haber sido claro. Si tienes cualquier duda, pásate por el foro y lo vemos detenidamente.
Saludos!
Muchas Gracias funciona perfecto
Me alegro 😉
Siguiendo los pasos da error en Me.Filter quizá es el nombre del formulario?
'Aplicamos el filtro al formulario
Me.Filter = miFiltro
Me.FilterOn = True
End Sub
Hola Alba,
No sabría decirte donde está fallando el código sin saber qué estás haciendo.
Abre un hilo en el foro y sube el programa para que lo revise, o si lo prefieres, envíamelo a administrador@vbatotal.com
Saludos.
Ejemplo muy útil y buenos recursos en tu página
Gracias,
Gracias Juan,
Agradezco mucho este tipo de comentarios. Por aquí ando para lo que necesites.
Saludos.