Que disparate. Mucho más sencillo. Primero voy a decirte los casos que se te pueden dar
1º Que entre y salga en el mismo día
2º Que entre un día y salga en la madrugada del siguiente, y que no sea festivo. Como no dices nada, he supuesto que no lo contabilizas
3º Que entre la víspera de un feriado, y salga en el día feriado.
Si tengo la tabla Festivos, pongo dos para el ejemplo
Y tengo la tabla Tabla1 con la que hago un formulario
1º Caso.- Entra y sale en el día.- En Horas Día te pone las horas que ha trabajado ese día
2º Caso.- Entra un día pero sale en la madrugada del siguiente que no es festivo.- En Horas día te pone las que ha trabajado ese día, ( no sé si quieres que te contabilice las que ha trabajado el día siguiente, por eso no muestra nada)
3º Caso.- Entra un día, sale en la madrugada del siguiente y éste es feriado(festivo). Puedes ver en los registros 3 y 4 que en Horas día te pone las del día de entrada y en Horas Festivo las que ha trabajado en el siguiente que SÍ es festivo.
Y el código no puede ser más sencillo. En las propiedades del cuadro de texto HoraSalida, en Eventos-Después de actualizar le tengo puesto
Private Sub HoraSalida_AfterUpdate()
If HoraSalida > HoraEntrada And HoraSalida < 1 Then
HorasDia = HoraSalida - HoraEntrada
ElseIf HoraSalida < HoraEntrada Then
HorasDia = 1 - HoraEntrada
If DCount("*", "festivos", "festivo=forms!tabla1!fechaentrada+1") = 1 Then
HorasFestivo = HoraSalida
End If
End If
End Sub
Me explico
Primera línea, si la hora de salida es mayor que la hora de entrada y la hora de salida es menor que las 24:00, horas día es la diferencia entre la entrada y la salida
Si hora de salida es menor que la hora de entrada, es decir, la hora de salida está ya en el día siguiente, las horas del día serían 1( que equivale a 24 horas) menos la hora de entrada
Y el último if es por si el día siguiente es festivo, entonces que rellena el cuadro Horas Festivo.