Microsoft Access – Filtrar formulario usando VBA – Filtrando números

Si seguiste el tutorial anterior “Filtrar formulario usando VBA” donde te mostraba como filtrar un subformulario a través de un campo tipo texto ahora es el momento de aprender a filtrar un campo tipo numérico.

Seguiré utilizando la base de datos del ejemplo anterior. Es una base de datos de películas con sus calificaciones, según el ministerio de educación y cultura de España que es de donde he descargado la base de datos con cerca de 77.000 registros lo que además nos viene bien para comprobar el poder de Microsoft Access trabajando con bases de datos extensas.

La idea es sencilla, tenemos un formulario principal que no está vinculado a ninguna tabla y sobre este un subformulario vinculado a la tabla “Películas” y que muestra todos los registros. A través del formulario principal escribiremos los distintos filtros, pudiendo combinarlos, y pulsando el botón “Buscar” nos localizará la película que estemos buscando de entre todas las disponibles en la base de datos.

Access-Filtro-Formulario

En este segundo tutorial nos vamos a centrar solamente en el filtro por la Distribuidora de la película, el cual en un campo tipo “Numérico” ya que filtraremos por el código de la distribuida que es su campo clave. También puedes comprobar que en los formularios he utilizado un cuadro combinado para la distribuidora que, a pesar de mostrar el nombre de la distribuidora, realmente lo que está seleccionando es su código que, como dije antes, es numérico. Como puedes comprobar en el ejemplo he desactivado el campo título que usamos en el ejemplo anterior y siguen desactivados el resto de filtros. El motivo es enseñarte a utilizar los distintos tipos de filtros y, una vez sepamos hacerlos todos, buscaremos la forma de poder combinarlos lo que hará de nuestro formulario una herramienta muy potente.

Como aplicar el filtro al formulario:

Los formularios en Access tienen dos propiedades que son las que vamos a modificar mediante código VBA y son:

  • Filter
  • FilterOn

Con la propiedad Filter especificamos el filtro concreto que queremos utilizar, por ejemplo “que la distribuidora se la Nº 33” que en la tabla Distribuidoras corresponde con “ALINCO S.A.”

Y con la propiedad FilterOn le diremos que aplique ese filtro.

Esas dos propiedades las vamos a configurar en el evento “Click” del botón “Buscar” situado en el formulario principal.

Lo primero que haremos será crear una variable para guardar en ella el filtro.

Dim sFiltro as String

Y ahora guardamos en ella el filtro

sFiltro = "Distribuidora = " & Me.cboDistribuiora

Con los filtros numéricos es más sencillo de trabajar que con los filtros de texto como vimos en la entrega anterior.

Seguimos utilizando el símbolo “&” para UNIR la cadena de caracteres del filtro con el cuadro combinado “Me.cboDistribuidora” de nuestro formulario. En este caso, al hacer referencia a un campo numérico ya no tenemos que encerrarlo entre comillas dobles y por tanto la línea del filtro se simplifica mucho más utilizando las comillas dobles solo al principio y al final de la cadena de caracteres que forman el filtro en sí. Realmente un filtro numérico sería algo así:

sFiltro = «Distribuidora = 33”

Y después sustituir nuestra distribuidora nº 33 por la referencia al cuadro combinado donde seleccionamos la misma tal y como vimos unas líneas más arriba:

"Distribuidora = " & Me.cboDistribuiora

Pues ya tenemos el filtro asignado a nuestra variable sFiltro, ahora solo nos queda especificar a Access que le asigne esa variable al subformulario y a continuación que lo filtre activándole el filtro. El código completo del botón buscar será este:

Private Sub cmdFiltrar_Click()

' Creamos la variable que contendrá el filtro

Dim sFiltro As String

' Asignamos el filtro a la variable

sFiltro = "Distribuidora = " & Me.cboDistribuiora

' Asignamos la varaible a la propiedad Filter del subformulario

Me.BusquedaSubFormulario.Form.Filter = sFiltro

' Le decimos al subformulario que active el filtro

' que previamente hemos asignado.

Me.BusquedaSubFormulario.Form.FilterOn = True

End Sub

Como toque final debemos desactivar el filtro con el botón “Mostrar Todos” y nada más simple como poner el filtro del subformulario en blanco, luego desactivar el filtro y si somos muy perfeccionistas, limpiar el cuadro de texto para que el usuario pueda realizar una nueva búsqueda.

Private Sub cmdQuitarFiltro_Click()

'Para eliminar el filtro lo dejamos en blanco con ""

Me.BusquedaSubFormulario.Form.Filter = ""

'A continuación desactivamos el filtro

Me.BusquedaSubFormulario.Form.FilterOn = False

'Y para rematar, el cuadro de texto del formulario

'lo ponemos en blanco para que podamos filtrar por

'otro término, esto ya es opcional.

Me.cboDistribuidora = Null

End Sub

Como puedes comprobar en el ejemplo solo he filtrado por el campo Distribuidora, obviando el campo Calificación que funciona exactamente igual. Te animo a que configures y pruebes el filtro del campo Calificación.

En la próxima entrega filtraremos por los campos fecha.

Referencias

Descárgate el ejemplo.

Listado de películas del ministerio de Educación y Cultura

Si quieres saber más

Curso de iniciación a Microsoft Access

Curso Avanzado de Microsoft Access con VBA

3 comentarios

  1. Cordial saludo,

    He buscado por todo lado un ejemplo como este, y este se adapta perfectamente a un trabajo que estoy realizando, esta publicación merece mis mas sinceros agradecimientos, encontré lo que buscaba.

    Gracias

    Jesus Recalde

  2. Muy bueno el tutorial ya que conseguido hacer lo que necesitaba, pero ahora tengo una pregunta. ¿Podría desde ese mismo formulario abrir un informe para imprimir los registros que he filtrado en el subformulario?. Gracias y saludos

Deja un comentario

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