Filtrar un formulario usando múltiples campos en Access

Escrito por Administrador

11 de enero de 2023

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,

saber-usuarios-conectados-base-datos
saber-usuarios-conectados-base-datos

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,

    1. Filtro: Realiza el filtrado de registros del formulario continuo en base a los criterios seleccionados.
    2. Borrar: Restablece el filtro y borrar los campos del mismo.
    3. Informe: Muestra un informe con la selección de registros actual.
    4. 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,

saber-usuarios-conectados-base-datos

Si queremos elaborar un informe con dicha información, no tenemos más que pulsar sobre el botón correspondiente,

saber-usuarios-conectados-base-datos

Si ahora pulsamos el botón Borrar, deshacemos el filtro y se limpian los campos del mismo,

saber-usuarios-conectados-base-datos

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

  1. Avatar

    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

    Responder
    • Avatar

      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!

      Responder
      • Avatar

        Muchas Gracias funciona perfecto

        Responder
  2. Avatar

    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

    Responder
    • Avatar

      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.

      Responder
  3. Avatar

    Ejemplo muy útil y buenos recursos en tu página
    Gracias,

    Responder
    • Avatar

      Gracias Juan,

      Agradezco mucho este tipo de comentarios. Por aquí ando para lo que necesites.

      Saludos.

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

Últimas publicaciones

Categorías

octubre 2024
LMXJVSD
 123456
78910111213
14151617181920
21222324252627
28293031 

Contacto