Consulta Días Hábiles y Festivos access

Estimado Experto:
Después de haberme estudiado cada post de este asunto por toda la web, no he conseguido encontrar una solución a mi problema, por eso, he decido solicitarle ayuda.
Actualmente tengo en Access una tabla llamada "Tabla1" con 2 campos Fecha 1 y Fecha 2 y otra tabla llamada "Festivos" con un solo campo lladado Festivo con cada una de las fechas festivas del año. Lo único que necesito mediante una consulta hallar los días que hay entre fecha 1 y fecha 2, pero quitándole Sábados, Domingos y Festivos.
Muchísimas Gracias por su Ayuda
1

1 respuesta

1
Respuesta de
Hola,
Por consulta no veo como hacerlo, creo que tendría que ser por código.
El código lo he planteado para que actualice un campo Días de la tabla Tabla1.
Lo que hago en el código es recorrer todos los días desde fecha1 a fecha2 y ver si son festivos o no, si no lo son que los cuente.
En la tabla Festivos unicamente metería los días festivos, pero no los sábados y domingos, ya que estos los puedes calcular con la función DiaSemana (WeekDay) que te devuelve el nº del día de la semana, entonces quitarías el =6 y el igual a 7.
Después comprobarías si la fecha está en la tabla Festivos.
La función sería:
Function DiferenciaFechas()
Dim db As Database
Dim rs As Recordset
Dim vFecha As Date
Dim var As Integer
Set db = CurrentDb
Set rs = db.OpenRecordset("Select Fecha1, Fecha2, Dias from Tabla1 where Dias=0")
Do While Not rs.EOF
var = 0
vFecha = rs!Fecha1
Do While vFecha < rs!Fecha2
If Weekday(vFecha, 0) <> 6 And Weekday(vFecha, 0) <> 7 Then
If IsNull(DLookup("[Festivo]", "[Festivos]", "[Festivo]=cDate('" & vFecha & "')")) = True Then
var = var + 1
End If
End If
vFecha = vFecha + 1
Loop
rs.Edit
rs!Dias = var
rs.Update
rs.MoveNext
Loop
End Function
Me cuentas, saludos Angeles
Estimada Angeles:
Ante todo, muchísimas gracias por su pronta respuesta. Necesito 1 aclaración.
¿Cómo llamo desde la consulta a la Función que me plantea?
Gracias
Hola,
Desde una consulta no se puede llamar a una función. Hay varias formas de ejecutar un código, por ejemplo:
En la pestaña módulos abres un módulo nuevo y escribes la función, si lo quieres ejecutar desde aquí, picarías en la flecha que hay en la parte superior.
Si no, guardarías el módulo (da igual el nombre) y abrirías una macro nueva, en acción pondrías EjecutarCódigo y en nombre de la función CalcularSaldo, al ejecutar la macro se ejecutaría el código.
También podrías hacerlo desde un formulario, te creas un botón, cuando salte el asistente le dices cancelar, después con botón derecho sobre el botón irías a Generar Evento ---> Generador de código, es ahí donde tendrías que escribir el código.
Me cuentas, saludos Angeles
Buenos Dias Angeles:
He seguido al pie de la letra lo que me expones, pero no consigo aún que salga los días hábiles. Los pasos que he dado son:
- He insertado como me comentas un nuevo campo llamado "Dias", en la Tabla "Tabla1". He dejado este campo vacío en todos los registros para que el código los llene con el código que me manda.
- He insertado un modulo llamándolo "DiferenciaFechas", y al presionar el botón Play, vuelvo a revisar la tabla "Tabla1", pero sige estando los campos "Dias" vacíos, no los llena con los días.
¿A qué se puede deber el error?
Recibe un cordial Saludo
Hola,
En el recordset rs lo que se hace es recorrer la tabla para los días=0, es decir para los que no estén calculados. Si el campo en vez de 0 tienes vacío no te devolverá ningún registro, puedes hacer 2 cosas, poner el campo día =0 para los no calculados o cambiar la condición del recordset:
Set rs = db.OpenRecordset("Select Fecha1, Fecha2, Dias from Tabla1 where Dias is null") 
Si quitases la condición cada vez que ejecutes la función te recalcularía toda la tabla:
Set rs = db.OpenRecordset("Select Fecha1, Fecha2, Dias from Tabla1")
También puedes poner las 2 condiciones:
Set rs = db.OpenRecordset("Select Fecha1, Fecha2, Dias from Tabla1 where Dias=0 or Dias is null")
Me cuentas, saludos Angeles
Estimada Ángeles.
Es usted una eminencia y una gran profesional. Le agradezco infinitamente su ayuda y colaboración. Ha sido todo un éxito.
Una vez, muchísimas gracias por su ayuda.
Reciba un cordial saludo
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje

Más respuestas relacionadas

¿No es la pregunta que estabas buscando?
Puedes explorar otras preguntas del tema Microsoft Access o hacer tu propia pregunta: