Filtro de fechas en VBA ACCESS

Escribo por aquí porque tengo un problemilla con los filtros de fechas.

No se como hacer el filtro para que al darle doble click en una de las líneas de la lista me seleccione justamente ese registro. En el código tengo escrito esto:

If Nz(Me.[ListaRepostaje], 0) <> 0 Then
    DoCmd.GoToControl "Repostaje"
    Forms("Repostaje").Filter = "Matricula ='" & Me.[ListaRepostaje].Column(0) & "'"
    Forms("Repostaje").Filter = "Fecha Repostaje = #" & Me.ListaRepostaje.Column(1) & "#"
    Forms("Repostaje").FilterOn = True
Else

Pero me sale error de sintaxis, falta operador en la expresión de consulta fecha repostaje

Si me podéis ayudar estaría muy agradecido, las fechas son mi talón de Aquiles en vba jeje.

1 respuesta

Respuesta
2

Suponiendo que tu fecha esté en la segunda columna del cuadro de lista, yo probaría así:

    Forms("Repostaje").Filter = "[Fecha Repostaje] = #" & Me.ListaRepostaje.Column(1) & "#"

Es decir, a poner el nombre del campo entre corchetes (no es bueno para trabajar con código usar espacios o caracteres extraños en los nombres de los campos o controles).

Además, tienes otro problema: solo te va a aplicar el filtro de fecha, nunca el de matrícula, porque al asignar el segundo filtro, "machacas" el primero.

Si quieres filtrar por los dos valores, has de construir un filtro compuesto:

    Forms("Repostaje").Filter = "Matricula ='" & Me.[ListaRepostaje].Column(0) & "' AND [Fecha Repostaje] = #" & Me.ListaRepostaje.Column(1) & "#"

Un saludo.


Muy buenas, lo primero muchas gracias por contestar.

Lo de los corchetes los tenia puesto pero ya después de tantas pruebas una de ellas los quite.

El filtro que me comentas ya lo puse y nada, aun así lo volví a poner ahora y efectivamente sigue sin salir. Cuando le doy doble click a la fila concreta en lugar de cargarme los valores de dicho registro me carga uno en blanco.

Quítale la línea DoCmd. GoToControl "Repostaje", porque si cambias de control, puede que pierdas el valor del cuadro de lista, y para filtrar el formulario, no te hace falta estar en "Repostaje".

Es lo único que se me ocurre "de primeras", porque el filtro lo tienes bien a nivel de sintaxis.

La línea esa la tengo puesta porque tengo 2 pestañas, en la primera es donde muestro la lista de todo y al hacer doble clic me manda a la segunda que es así como se llama, y donde viene todo detallado. Mire también de cambiarle el nombre al control pero pasa lo mismo y la verdad que me tiene loco esto.

Estoy pensando en que una posible solución para salir del paso puede ser crear un campo numérico y que filtre por ese campo único. Pero si es verdad que me gustaría saber el motivo del fallo en el filtro de las fechas.

Se me hizo la luz. Prueba a darle formato americano a la fecha:

Forms("Repostaje").Filter = "Matricula ='" & Me.[ListaRepostaje].Column(0) & "' AND [Fecha Repostaje] = #" & Format(Me.ListaRepostaje.Column(1),"mm/dd/yyyy") & "#"

Siento ser tan "tocapelotas" pero no puedo cambiar el formato de la fecha, tengo otro modulo que me crea carpeta según el campo de la fecha y por desgracia como ya sabes el nombre de las carpetas no admite las barras.... la verdad es que esta difícil la cosa y lo malo que contra mas difícil esta más me gustaría saber el motivo por el cual no funciona.

No me has entendido... No te digo que cambies el de fecha en tus tablas o cuadro de lista, sino a la hora de construir el filtro, usando la función Format(), como te puse en el código de arriba.

Prueba y me dices

Pues acabo de probar y efectivamente así funciona!! lo que si me gustaría es saber el motivo por el cual tengo que poner en el filtro un formato que no es el que tiene el campo, si me pudieras explicar eso lo agradecería la verdad.

Muchísimas gracias!!!

Claro que te explico: VBA, como la mayoría de lenguajes informáticos, está basado en inglés, americano en concreto, y por eso las fechas las entiende en ese formato (mes, día, año) y no en el europeo (día, mes, año)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas