Microsoft Access – Filtrar formulario usando VBA – Filtrando Fechas

Si seguiste el tutorial anterior Filtrar formulario usando VBA – Filtrando Números donde te mostraba como filtrar un subformulario a través de un campo tipo numérico ahora es el momento de aprender a filtrar un campo tipo fechas.

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”, 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-Filtrando-Fechas

En este tercer tutorial nos vamos a centrar solamente en el filtro por la fecha de calificación de la película, el cual es un campo tipo “Date”. Como puedes comprobar en el ejemplo he desactivado los campos Título, Distribuidora y Calificación que usamos en el ejemplo anterior para centrarnos solo en el filtro fecha. 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 fecha de calificación esté comprendida entre el 01/01/2000 y 31/12/2005”

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 fecha.

  1. Si lo que pretendemos es filtrar una sola fecha, que no es el caso de este ejemplo, usaríamos la siguiente expresión:
    • FechaCalificacion = #01/01/2000#
  2. Si pretendemos filtrar un intervalo de fechas usaríamos el parámetro “Between” que significa “entre”:
    • FechaCalificacion BETWEEN #01/01/2000# AND #31/12/2005#

Debemos de tener claro un punto importante, las fechas hay que encerrarlas entre almohadillas “#”

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 = "FechaCalifiacion BETWEEN # " & Me.txtFechaInicio & “ # AND # ” & txtFechaFin & “ # ”

Como puedes comprobar, si has seguido los otros dos tutoriales, el filtro es una cadena de texto que debe ir encerrada entre comillas dobles pero, entre medio, estamos haciendo referencia a dos cuadros de texto de nuestro formulario y por ello es necesario cortar la cadena de texto usando el símbolo “&” para especificar los cuadros de texto donde tendremos las fechas “txtFechaInicio” y “txtFechaFin”

Con las fechas, tenemos otro problema importante, más aun, importantísimo que nos puede dar al traste con todo el filtro. En los cuadros de texto la fecha está escrita en formato español, o sea, primero el día, luego el mes y por último el año y así es como se lo pasamos por código VBA para que filtre pero, caprichos de Microsoft, el código VBA solo entiende el inglés, y las fechas al filtrar las interpreta en formato americano, o sea, primero mes, luego día y por último el año, con lo cual, si dejamos el código tal y como está no filtrará correctamente nuestros registros. Para ello es necesario convertir la fecha al formato americano usando la función “Format”. Esta función es muy versátil para convertir entre distintos tipos de formatos aunque en este tutorial voy a explicarla solo en el caso que nos atañe y su uso es así:

Usando la función «Format»

Format( #21/12/2005# , “mm-dd-yyyy”)

Como puedes observar, estamos especificando en qué orden queremos que use la fecha, primero el mes “mm”, luego el día “dd” y por último el año “yyyy”.

Vamos a completar la cadena de texto del filtro incluyendo la función “Format”

sFiltro = "FechaCalificacion BETWEEN # " & Format(Me.txtFechaInicio, "mm-dd-yyyy") & _
"# AND #" & Format(Me.txtFechaFin, "mm-dd-yyyy") & "#"

Ya tenemos el filtro asignado a nuestra variable sFiltro, ahora solo nos queda especificar a Access que 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:

Escribiendo el código de nuestro Botón:

Private Sub cmdFiltrar_Click()

' Creamos la variable que contendrá el filtro

Dim sFiltro As String

' Asignamos el filtro a la variable

sFiltro = "FechaCalificacion BETWEEN # " & Format(Me.txtFechaInicio, "mm-dd-yyyy") & _ 
"# AND #" & Format(Me.txtFechaFin, "mm-dd-yyyy") & "#"

' Asignamos la variable 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 los cuadros 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, los cuadros de texto del formulario

'los ponemos en blanco para que podamos filtrar por

'otro término, esto ya es opcional.

Me.txtFechaInicio = Null

Me.txtFechaFin = Null

End Sub

En la próxima entrega combinaremos los filtros de texto, número y fechas para que el formulario sea capaz de filtrar por todas ellas a la vez.

Referencias

Descárgate el ejemplo.

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

Si quieres saber más

Curso Avanzado de Microsoft Access con VBA

Página oficial de Microsoft Office

2 comentarios

  1. Está genial la verdad y para iniciados como yo es la leche, a mi me salta un error continuamente al presionar el botón, .BusquedaSubFormulario => «no se encontró el método o dato miembro». Me puedes echar un cable? Graciassssssssssssssss

  2. Muchas gracias, la verdad es que este tutorial me ha servido al 100%, sigan asi ayudando a los que se inicial al uso del VBA para Access…

Responder a Andres Gutierrez Cancelar respuesta

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