Filtrar campo fecha con VBA Access

Resulta que tengo un campo llamado DateTime, que me muestra solo la fecha. Quiero que al cargar el formulario me haga un filtro y muestre solo los datos anteriores a la fecha de hoy. Ahora tengo puesto esto pero no filtra nada:

Forms!Subform_Fichajes_LineAp_SIN_cerrar.Filter = "[DateTime] < #02/04/2020#"

Antes tenia puesto:

'Forms!Subform_Fichajes_LineAp_SIN_cerrar.Filter = "[DateTime] < Date"

Me.FilterOn = True

Hay ocasiones que en el filtro me pregunta que escriba el campo Verdadero, como si le hubiese puesto que el filtro fuese True. Creo que puede ser error de Access.

Pero no consigo que me filtre. ¿Tengo algo mal escrito?

1 Respuesta

Respuesta
2

El campo dónde lo tienes, ¿en un subformulario? Y desde dónde ejecutas el código,¿? ¿Desde el formulario o desde el subformulario?

Si el campo está en el subformulario y lo ejecutas desde el formulario principal, la sintaxis sería:

Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.Filter = "[DateTime] < Date"

Si lo haces desde el propio subformulario:

Me.Filter = "[DateTime] < Date"

O lo mismo con una fecha estática:

Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.Filter = "[DateTime] < #04/02/2020#"

En cuanto a lo de que no te filtre si pones la fecha actual, debes de tener en cuenta que VBA lee las fechas con formato americano, es decir, mes-día-año, por lo que el filtro que tu has puesto quiere decir que devuelva las fechas anteriores al 4 de febrero, y no al 2 de abril.

De cualquier forma, siempre puedes recurrir a la función Format() en uno o los dos lados de la igualdad para igualar los datos, por ejemplo:

Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.Filter = "Format([DateTime],'dd/mm/yyyy') < Format(Date,'dd/mm/yyyy')"

Hola, lo que tengo escrito ahora es esto:

Private Sub Form_Load()

If Forms!Fichajes_sin_cerrar.Tick_datos_hoy = False Then

Me.Filter = "[DateTime] < Date"
Me.FilterOn = True

Else

Me.Filter = "[DateTime] = Date"
Me.FilterOn = True

End If
End Sub

Al abrir el formulario, me pide que ponga el valor del campo Fecha.

Esto lo tengo en un subformulario que al cargarse mira si el tick del formulario principal esta puesto. Con este Tick_datos_hoy quiero que si esta puesto me filtre por los datos con fecha de hoy y sino muestre los datos anteriores a hoy.

Gracias.

En el código no hay nada que explique que te pida el valor de un campo fecha, por lo que es de suponer que tienes por otro lado algo que hace referencia a un campo Fecha que no existe.

Por otro lado, y ya es una cuestión personal depreferencias, yo soy partidario de quitar las funciones, variables, controles... De dentro de las cadenas, es decir, que yo el filtro así (lo que no quieodecir que como tu lo tengas este mal o no vaya a funcionar):

 Me.Filter = "[DateTime] < #" &  Date & "#"

Por último, si el código está en el Load del subformulario, y la casilla está en el formulario principal, el If sería :

If Me.Parent.Tick_datos_hoy = False Then

Hola,

he puesto lo que me has dicho y los filtros van bien, pero cuando no les aplico la condición del If, en cuanto pongo If Me.Parent.Tick_datos_hoy = False Then, no hace caso y no activa el filtro, mostrando todos los datos. He probado como al pincipio (If Forms!Fichajes_sin_cerrar.Tick_datos_hoy = False Then) y tampoco va.

Me falta algo?

Gracias.

Lo mejor va a ser que hagas una copia de tu Bd, en la que dejes solo el formulario, el subformulario y las tablas que necesiten funcionar, la subas a cualquier nube y me pongas aquí el enlace de descarga para que lo vea, porque hay "algo" que no me estás diciendo y así es imposible que acierte con mi respuesta.

Buenos días,

Ya lo he podido solucionar, con lo que me dijiste en un post anterior, el problema lo tenía en el formato, que como bien dijiste, VBA lo pone en formato americano. Ahora lo que tengo es esto:

Private Sub Tick_datos_hoy_Click()

If Me.Tick_datos_hoy = True Then

Me.Filter = "Format([DateTime],'mm/dd/yyyy') = #" & Date & "#"
Me.FilterOn = True
Me.Subform_Fichajes_Proyectos_SIN_cerrar.Form.Filter = "Format([Fecha_inicio],'mm/dd/yyyy') = #" & Date & "#"
Me.Subform_Fichajes_Proyectos_SIN_cerrar.Form.FilterOn = True

Else

Me.Filter = "Format([DateTime],'mm/dd/yyyy') < #" & Date & "#"
Me.FilterOn = True
Me.Subform_Fichajes_Proyectos_SIN_cerrar.Form.Filter = "Format([Fecha_inicio],'mm/dd/yyyy') < #" & Date & "#"
Me.Subform_Fichajes_Proyectos_SIN_cerrar.Form.FilterOn = True

End If
End Sub

A parte de que tenia mal puesto el formato, el formulario me hacia cosas raras, probé a quitar todo el código y solo con el tick marcado, escribir algo en un cuadro de texto:

If Me.Tick_datos_hoy=true then

Text2="Hola"

end if

end sub

Y tampoco hacia nada hasta que lo probaba en otro formulario nuevo y funcionaba bien, es como si el formulario se volviera corrupto.

De todas maneras ya funciona con el texto que he puesto arriba.

Dejo abierto el hilo por si tienes algún comentario, sino ves nada que añadir, lo cierro.

Muchas gracias.

Me alegra ver que has resuelto el tema del filtro.

En cuanto a por qué no te funciona el If para validar la casilla en un formulario sí y en otro no, ni idea. Lo único que se me ocurre que puedas probar es "compactar y cerrar" la BD y también depurar el código VBA, por si tienes algún error no detectado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas