Filtrar formulario con VBA y con fechas.

Resulta que tengo un formulario en el que quiero hacer un filtro a un campo que tiene los datos de fecha y hora de un registro, pero no me funciona.

Ahora lo hago así:

Me.FilterOn = True
Me.Filter = "StartTime < Date"

Lo que quiero es que me filtre en el campo StartTime y aparezcan solo los datos inferiores a la fecha actual.

¿Qué tengo mal?

Respuesta
2

Como poco, tienes las lineas al revés: primero debes decirle cual es el filtro (Me.Filter=...) y luego aplicarlo (Me.FilterOn=True)

Y como no dices por qué no te funciona, te propongo otras alternativas:

Me.Filter = "StartTime <#" & Date & "#"

o

Me.Filter = "StartTime <#" & Time & "#"

Por si tienes algún "problema" por las horas y te aparecen (o no) registros que no deben...

Hola, muchas gracias, funciona correctamente.

Estoy intentando ahora hacer con un tick, que me cambie el filtro y me muestre los datos de hoy, he intentado poner:

Private Sub Tick_datos_hoy_Click()
Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.Filter = "StartTime =#" & Date & "#"
Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.FilterOn = True
Me.Subform_Fichajes_LineAp_SIN_cerrar.Form.Requery
End Sub

Pero me al darle Click, desaparecen todos los datos.

Que tengo mal escrito?

Gracias.

No tienes mal escrito nada, aunque te sobra la linea del Requery, pues es totalmente innecesaria.

¿Por qué no te aparecen datos al aplicar el filtro? Pues muy sencillo: en tu campo StartTime dices que registras fecha y hora, por ejemplo 25/03/2020 07:41:30, y lo quieres igualar con la fecha actual (que es lo que devuelve Date), 25/03/2020, pero sin hora. Y como 25/03/2020 07:41:30 no es igual que 25/03/2020, no encuentra ninguna coincidencia para el filtro y por tanto no devuelve registros.

¿Cómo lo puedes solucionar? Fácil, trabajando solo con la parte de la fecha del campo:

....Form.Filter = "CDate(CInt(StartTime)) =#" & Date & "#"

o

....Form.Filter = "CDate(Left(StartTime,10)) =#" & Date & "#"

o

....Form.Filter = "Format(StartTime,'mm/dd/yyyy') =#" & Format(Date,"mm/dd/yyyy") & "#"

Ya funciona perfectamente.

He tenido que usar la segunda opción ....Form.Filter = "CDate(Left(StartTime,10)) =#" & Date & "#"

Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas