Access, Excel, VBA y más

Microsoft Access – Filtrar formulario usando VBA – Filtrando Texto

Filtrar un formulario en Access usando código VBA es más sencillo de lo que imaginamos. Las versiones actuales de Microsoft Access incluyen muchos filtros en sus formularios para que los usuarios que dominen la aplicación puedan utilizarlos sin tener que programar nada pero en muchos casos nos encontramos con la necesidad de diseñar una base de datos para usuarios menos expertos y debemos proporcionarle una herramienta que les simplifique lo máximo posible su uso.

Para ello hemos diseñado el siguiente ejemplo. 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 primer tutorial nos vamos a centrar solamente en el filtro por el título de la película, el cual en un campo tipo “Texto”. Como puedes comprobar en el ejemplo, el resto de filtros están desactivados y los iremos activando en los próximos tutoriales donde ampliaremos los filtros usados.

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:

Con la propiedad Filter especificamos el filtro concreto que queremos utilizar, por ejemplo “Que el campo Título contenga la palabra Batman”

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.

Recordemos antes de nada como debemos filtrar un campo tipo texto que de las dos siguientes opciones usaremos la segunda:

    1. TituloComercial = “Batman”, en este caso solo buscaría el título que contuviera esa palabra exacta, por ejemplo “Batman Return” no sería capaz de encontrarla.
    2. TituloComercial LIKE  “*Batman*”, el modificador “LIKE” es más versátil que el “=” y nos permite usar comodines en la búsqueda como el “*”. En este caso buscaría cualquier película cuyo título contuviera la palabra “Batman”

Sigamos desgranando el ejemplo, 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 = "TituloComercial LIKE ' * " & Me.txtTitulo & " * ' "

Esta es la parte más delicada de los filtros de texto, si logras comprender como lo he construido todo será mucho más sencillo. Vamos a explicarlo.

Para asignar a la variable sFiltro todo el filtro, hay que dárselo encerrado entre comillas dobles. Dentro del filtro tenemos una complejidad añadida y es que queremos que lea, como término a buscar, el texto que tenemos en un cuadro de texto del formulario al que hemos llamado txtTitulo y además vamos a incorporar directamente el caracter comodín asterisco (*) a ambos lados del texto a buscar para que busque cualquier texto que contenga la palabra buscada. Si quieres saber más sobre el uso de los caracteres comodín puedes visitar el siguiente enlace de Microsoft donde explican su funcionamiento. Simplificando mucho y en español esto es lo que deberíamos de decirle al filtro.

Mi variable sFiltro  es =  «Campo TituloComercial LIKE  “ * El Título que estoy buscando * ”   »

Como puedes ver para asignar el filtro a la variable, este al completo, debe ir encerrado entre comillas dobles pero es que además dentro del propio filtro, el texto a buscar, TAMBIÉN hay que encerrarlo entre comillas dobles ya que es una cadena de caracteres y en VBA toda cadena de caracteres SIEMPRE va encerrada entre comillas dobles.

Pero en este caso tan concreto, ya verás que no pasa con otros filtros numéricos o de fechas, mezclarle tantas comillas dobles hace que Access se lie a la hora de asignar el filtro por ello a la cadena de caracteres que identifica el texto a buscar le vamos a sustituir las comillas dobles (“) por comillas simples (‘) de esta manera:

Mi variable sFiltro  es =  «Campo TituloComercial LIKE  ‘ * El Título que estoy buscando * ’  »

Resuelta la primera complejidad, vamos a resolver la segunda, El Título que estoy buscando es un cuadro de texto de nuestro formulario y, para que nuestro filtro se capaz de leerlo debemos de CORTAR la cadena de texto del filtro a la altura donde tenemos que especificar el cuadro de texto y, una vez especificado el mismo, volver a UNIR el filtro. Para conseguirlo nos ayudaremos del símbolo (&) que en VBA se utiliza para UNIR cadenas de caracteres. En español otra vez, deberíamos de decirle algo así:

Mi variable sFiltro  es =  «Campo TituloComercial LIKE  ‘ * ” & Me.txtFiltro & » * ’  »

Como puedes observar, he CORTADO el filtro cerrando comillas dobles, después del (&) he especificado mi cuadro de texto del formulario y a continuación, tras el siguiente (&), he vuelto a abrir comillas para terminar de completar el filtro. A groso modo, he dividido el filtro en tres partes que se han unido mediante el símbolo (&):

    1. 1- «Campo TituloComercial LIKE  ‘ * ”
    2. 2- & Me.txtFiltro &
    3. 3- » * ’  «

Te recomiendo encarecidamente que repases estos pasos antes de seguir, mucha gente se lía con ellos, sin embargo, una vez que tienes claro el concepto que es muy, pero que muy sencillo, serás capaz de escribir filtros en VBA con los ojos cerrados.

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 = "TituloComercial LIKE'*" & Me.txtTitulo & "*'"

' 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 puedes ver, mucho rollo de explicación para que al final, con cuatro líneas tengamos un filtro que hace maravillas.

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.txtTitulo = Null

End Sub

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

 

Salir de la versión móvil