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.
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
Listado de películas del ministerio de Educación y Cultura
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
Y si necesito que filtre de acuerdo a tres campos del formulario como podría hacerlo?
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