Access VBA: Filtrar en Cuadro de Lista con fecha de hoy y mañana

De nuevo expertos. Tengo un problema que pensé me saldría sin ayuda. Pero recurro nuevamente a Uds. Siguiendo con mi pregunta anterior, quiero agregar tres botones en mi formulario:

-Hoy

-Mañana

-Semanal

Ellos deberían filtrar en mi cuadro de lista las actividades que tengo previstas para tal ocasión.

He intentado con el siguiente código:

lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where..."

No se como finalizar la cadena... Y si pueden decirme como debe ser el código para los siguientes botones estaría muy agradecido. Aclaro que el botón de "Semanal", debería llevar los registros contemplados entre el lunes y domingo de la próxima semana.

Respuesta
2

Otra forma de filtrar la semana próxima es con el número de semana del año, sacándolo con la función ParcFecha o DatePart (https://support.office.com/es-es/article/parcfecha-funci%C3%B3n-datepart-26868a79-5505-4e5a-8905-6001372223fa):

If DatePart("ww",Date,,2)=52 Then
   lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where DatePart('ww',fechacarga,,2)=1 AND Year(fechacarga)>=Year(Date)"
Else   
   lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where DatePart('ww',fechacarga,,2)=DatePart('ww',Date,,2)+1 AND Year(fechacarga)=Year(Date)"
End If

En el segundo parámetro opcional, le indico un 2 para que considere como semana 1 la primera que tenga 4 días de enero, que es la norma ISO, pero podrías usar cualquier otro parámetro, siempre que lo mantengas en cada uso de la función, y teniendo en cuenta también que según el que uses te puedes encontrar con una semana 53, lo que te obligaría a tenerlo en cuenta en el IF.

Además, hay que tener en cuenta en año, para que no te saque semanas de años pasados.

Un saludo.


1 respuesta más de otro experto

Respuesta
2

Por partes, para HOY

lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where fechacarga=Date()"

Para mañana

lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where fechacarga=Date()+1"

Para la semana siguiente, la adaptas a tus datos

Select Case Format(Date, "dddd")
Case Is = "lunes"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+6 and date()+13"
Case Is = "Martes"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+5 and date()+12"
Case Is = "Miércoles"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+4 and date()+11"
Case Is = "Jueves"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+3 and date()+10"
Case Is = "viernes"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+2 and date()+9"
Case Is = "Sábado"
Lista9.RowSource = "select alumno from otra where fechaalta between Date()+1 and date()+8"
Case Is = "domingo"
Lista9.RowSource = "select alumno from otra where fechaalta between Date() and date()+7"
End Select

Hola Julián González Cabarcos, como siempre muchas gracias. En el botón semanal no lo pude hacer como me lo describió, pero opte (porque igual lo necesitaba) dos cuadros de texto, donde solicito una fecha inicial y una final. Como siempre, no me salió.. Me podrías indicar donde está mi error?

lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades between Date(txt_desde) and Date(txt_hasta)"

Gracias como siempre por su tiempo. Disculpas por el cambio de planes. Saludos 

Vamos a ver, en principio no necesitas dos cuadros de texto. Luego te digo. Si tengo la tabla

 Puedes ver que sólo hay dos que son de la semana que viene. Y tengo el formulario

Cuando pulso el botón

El código es el que te puse.

El error lo tienes en que le estás diciendo que ... from actividades between pero no le está diciendo que campo tiene que estar entre los valores. Además el criterio no es Date( texto... Date es una funcion

Date() equivale a FechaActual()

Sería

lst_agendados.RowSource = "Select Id, FechaCarga, Operador, Fecha, Actividad from Actividades where fecha carga between dorms!nombredelform!txt_desde and
Forms! Nombredelform! Txt_hasta"

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas