Está en la página 1de 9

FILTRO POR FORMULARIO1

Filtrar en nuestro formulario es algo que se suele necesitar


si hoy sí mañana también. Y hay multitud de técnicas para
filtrar.

Sin embargo, en este ejemplo aplicaremos una herramienta


que incorpora Access y que quizá no sea excesivamente
conocida. Es lo que se denomina “Filtro por Formulario”.

Este ejemplo lo dividiré en dos partes: la primera será


simplemente para explicar cómo crear un filtro por
formulario de manera totalmente manual y cómo utilizarlo
también de manera totalmente manual.

En una segunda parte, y dadas las especiales características de un filtro por formulario, os
explicaré cómo podemos utilizarlo sirviéndonos de algo de código VBA (muy muy sencillo).

En definitiva, que si ya conocéis lo que es un filtro por formulario podéis saltar directamente a
la segunda parte. Eso sí, si lo hacéis pensad que voy a dar por supuestas algunas cosas y no
me detendré a explicarlas (probablemente las haya explicado en la primera parte del ejemplo).
Así que, para adelante o para atrás, si no me dejo nada tenéis toda la información en este
propio documento.

Pero antes de empezar hablemos de…

FILTROS, FILTROS Y MÁS FILTROS


Quizá la idea del filtro por formulario no sea la que más se adapte a vuestras necesidades (¡o
sí!). Sin embargo, es posible que este ejemplo caiga en vuestras manos sin conocer mi web
(¡oh, cielos!). Si es así aquí tenéis unos enlaces que conducen a ejemplos donde se explica
cómo trabajar con diferentes filtros o sistemas de búsqueda en formulario:

 Abrir formulario filtrando → Enlace

 Filtro por combo en formulario → Enlace

 Filtro por combo → Enlace

 Crear un filtro múltiple → Enlace

 Formulario buscador al tecleo (ejemplo de Sveinbjorn) → Enlace

 Formulario buscador al tecleo 2 (ejemplo de Sveinbjorn) → Enlace

 Búsqueda en diferentes campos de la misma tabla → Enlace

1 La BD de ejemplo os la podéis bajar aquí

1
Visítame en http://neckkito.siliconproject.com.ar
PRIMERA PARTE
FILTRO POR FORMULARIO “MANUAL”
¿CÓMO SE HACE?

¿Qué necesitamos para nuestro “chiquitín”? Pues vamos a


crearnos una tabla y sobre la misma un formulario. A ese
formulario, y a efectos de este ejemplo, lo llamaré FDatos.

Para que más adelante entendáis los filtros que voy a aplicar aquí tenéis una muestra de los
datos que hay en la tabla:

Vamos a abrir FDatos en vista Formulario. Una vez abierto nos vamos al Menú Inicio → Grupo
de Opciones “Ordenar y Filtrar” → Botón “Avanzadas...” → Filtro por formulario

Una vez hecho esto nuestro formulario FDatos va a adquirir un aspecto “extraño”, con unas
pestañas en la parte inferior, tal y como se puede apreciar en la ilustración siguiente:

2
Visítame en http://neckkito.siliconproject.com.ar
¿Qué encontramos ahí? Pues que nuestros campos se han convertido en cuadros combinados y
que tenemos esas pestañas “Buscar” y “Or” en la parte inferior.

Si hemos obtenido esta transformación frankensteiniana es que vamos bien ;-)

¿CÓMO SE FILTRA?

FILTRO SENCILLO

Pues nada más sencillo que desplegar el combo y seleccionar el valor que queramos filtrar. Una
vez nos aparezca en pantalla el valor a filtrar:

a) Sistema 1: nos vamos a Menú Inicio → Grupo de opciones “Ordenar y Filtrar” → Botón
alternar filtro

Y cuando le hagamos clic, a modo de Jekyll y Mr. Hyde, nuestro formulario volverá a la
normalidad, sólo que está vez nos mostrará los resultados filtrados.

3
Visítame en http://neckkito.siliconproject.com.ar
b) Sistema 2: hacemos clic derecho sobre cualquier parte vacía del formulario y
seleccionamos la opción “Aplicar filtro u ordenar”

4
Visítame en http://neckkito.siliconproject.com.ar
Para volver al formulario “normal” hacemos de nuevo clic sobre el botón “Alternar filtro” y…
¡voilà!

Ni que decir tiene que ese grupo “Ordenar y Filtrar” tiene


otros botones con los que podéis operar. Sin embargo, sus
títulos son tan descriptivos que no los voy a explicar aquí.
Os animo a que vayáis probandolos, a ver “qué pasa” ;-)

FILTRO COMPUESTO / FILTRO MÚLTIPLE


En el apartado anterior hemos filtrado por aquellos registros
cuya “Afición” era “Ironing”. Supongamos que queremos los
de “Ironing” y los de “Skate”.

Pues para crearnos ese filtro compuesto lo único que tenemos que hacer es:

1.- Seleccionar “Ironing” en el campo correspondiente


2.- Hacemos clic sobre la pestaña OR en la parte inferior. Eso nos mostrará de nuevo el
formulario sin filtros.
3.- Seleccionar “Skate” en el campo correspondiente
4.- Aplicar lo visto en el sistema 1 o sistema 2 del apartado anterior.

Si nos fijamos, cuando hemos hecho clic sobre la pestaña “OR”, nos ha aparecido una nueva
pestaña “OR”. Lógicamente eso implica que podríamos seleccionar todos los valores que
quisiéramos para nuestro filtro compuesto, no sólo dos.

Si sabemos bien lo que queremos (y… ¿quién sabe eso?) podemos “programar” directamente
nuestro filtro compuesto a través de una expresión. La sistemática anterior también podría
hacerse según muestra la ilustración:

Finalmente, si queremos un filtro múltiple lo único que tenemos que hacer es, nada más y
nada menos, que ¡filtrar por varios campos!

5
Visítame en http://neckkito.siliconproject.com.ar
FILTRANDO POR APROXIMACIÓN
¿No estamos muy seguros de lo que queremos? (ya lo sabía yo, ya…). Pues sin problemas.
Podemos filtrar por aproximación según podéis ver en la siguiente ilustración:

El asterisco es nuestro carácter comodín. El filtro de la ilustración indica que nos mostrará
todos los valores que empiecen por la letra zeta. Si queremos todos los que terminen por zeta
deberíamos haber escrito <LIKE “*Z>; si queremos todos los que contengan la zeta
hubiéramos escrito <LIKE “*Z*”>

Si escribimos, por ejemplo, “Z*” (sin las comillas) en ese campo Access también nos detectará
que estamos usando un carácter comodín, por lo que también nos filtrará sin problemas 2.

FILTRANDO POR NULOS


Ya para acabar esta primera parte: ¿qué pasaría si queremos ver aquellos registros que
contienen campos nulos?

2 El asterisco no es el único carácter comodín admitido en Access: hay algunos más. Os recomiendo visitar esta página para que los
podáis ver. No os asustéis por la página, dado que lo que nos interesa (caracteres comodín) está en las tablas que podéis ver en la
misma.

6
Visítame en http://neckkito.siliconproject.com.ar
Pues nada más sencillo que escribir NULL en el control de filtro. Es decir:

¿Y si queremos ver precisamente los que no son nulos? Pues aplicamos la negación o
aplicamos el símbolo “<>” (distinto de):

Y, en principio, con esto ya estamos preparados para poder realizar filtros por formulario.

SEGUNDA PARTE
FILTRO POR FORMULARIO CON PROGRAMACIÓN
Alguien podría pensar: “Fácil. Ponemos un botón en el formulario que, al hacer clic, aplique el
filtro”.

Sin embargo, el “problema” de los formularios por filtro es que deshabilitan automáticamente
los botones de comando que podamos tener en el formulario. Como diríamos comúnmente:
“¡te pillé!”. 

Vamos pues a crearnos un formulario sobre nuestra tabla para poder filtrar. A efectos de este
ejemplo lo he llamado FDatos2.

En esa misma sección, a la derecha, insertamos un botón de comando que llamaremos

7
Visítame en http://neckkito.siliconproject.com.ar
cmdAbreFiltroPorFomulario3, y le generaremos el siguiente código4 en el evento “Al hacer clic”:


Private Sub cmdAbreFiltroPorFormulario_Click()
DoCmd.RunCommand acCmdFilterByForm
DoCmd.OpenForm "FAplicaFiltro"
End Sub

Como podéis ver lo único que hace este código es pasar


nuestro formulario a la vista de filtro por formulario y abrir
FAplicaFiltro, que explicaré en breve.

Le añadimos un nuevo botón que llamaremos cmdQuitaFiltro y le generaremos en el mismo


evento el siguiente código:


Private Sub cmdQuitaFiltro_Click()
Me.FilterOn = False
End Sub

que lo único que hace es quitar el filtro que pudiera afectar al formulario.

Si, llegados a este punto, probáis el primer botón, podréis ver lo que os comentaba unas líneas
más arriba: nuestros botones de comando quedan inhabilitados automáticamente. Entonces,
¿cómo solventar este problema?

Veamos…

Vamos a crearnos un formulario en blanco, que llamaremos FAplicaFiltro. En ese formulario


FAplicaFiltro vamos a añadir un botón de comando que llamaremos cmdFiltrar. Lo situamos en
una esquina de la sección detalle, y redimensionamos la propia sección para que nos quede un
“buñuelito” la mar de hermoso donde sólo se vea el botón, sin fondo de sección visible. Por
ejemplo:

A continuación sacamos las propiedades del formulario y:

→ Pestaña Formato:
→ Estilo de los bordes: Diálogo
→ Centrado automático: Sí
→ Selectores de registro: No
→ Botones de navegación: No
→ Barras de desplazamiento: ninguna
→ Cuadro de control: No
→ Título: hacemos un espacio con la barra espaciadora
→ Pestaña Otras:
→ Emergente: Sí
3 Para asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pestaña Otras →
Nombre. Ahí escribimos el nombre que queramos.
4 Para generar código debemos sacar las propiedades del control → Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.

8
Visítame en http://neckkito.siliconproject.com.ar
En cmdFiltrar, en su evento “Al hacer clic”, le generamos el siguiente código:


Private Sub cmdFiltrar_Click()
DoCmd.Close acForm, Me.Name
DoCmd.RunCommand acCmdApplyFilterSort
End Sub

El botón lo que hace es cerrar el formulario emergente y


acto seguido aplicar el filtro

Ya casi está, pero hay que prevenir una posible contingencia: ¿Y si el usuario, en lugar de
utilizar nuestro hermoso botón, decide cerrar el formulario con el botón de cerrar (la X en la
esquina superior derecha)?

Pues vamos a prevenir este comportamiento “no domesticado” del usuario. Para ello situamos
FDatos2 en vista diseño, sacamos las propiedades de formulario → Pestaña Eventos → Al
aplicar el filtro, y generamos este código:


Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If CurrentProject.AllForms("FAplicaFiltro").IsLoaded Then
DoCmd.Close acForm, "FAplicaFiltro"
End If
End Sub

Es decir, si encuentras abierto el formulario FAplicaFiltro pues ciérramelo.

¿Y por qué el evento “Al aplicar el filtro”? Pues porque cuando tenemos nuestro formulario en
vista de filtro por formulario el botón cerrar no es, en realidad, lo que entendemos por botón
cerrar, sino que se corresponde a la orden: “Aplícame el filtro”.

Eso lo podéis comprobar simplemente porque si elegís algún parámetro de filtro y cerráis con
la X veréis que el formulario, automáticamente, os aplica el filtro, y digamos que “cambia la
vista”, pero no os cierra el formulario.

Y con esto y un bizcocho…

PARA FINALIZAR EL EJEMPLO


Pues parece que hemos añadido una nueva “criatura” a nuestra “guardería de filtros”, lo cual
es bueno, dado que así sabemos que hay una herramienta más que, en algún momento dado,
puede sernos útil en nuestra aplicación.

Espero que el ejemplo os haya sido de utilidad. Un saludo, y…

¡suerte!

9
Visítame en http://neckkito.siliconproject.com.ar