Calcular horas libres dependiendo el día laborado para consultas posteriores

Consultando y molestando nuevamente a los expertos: tengo un formulario que capturo la fecha, nombre de trabajador, las horas que va a trabajar ese día y un campo horas libres el cual debe ser calculado de la forma siguiente: Llega un trabajador capturo la fecha, su nombre, le asigno 8 horas para trabajar( posibles de 1 a 8), el campo horas libres debe almacenarse automáticamente o posteriormente con el valor 0 que proviene de: de 8-8 ( 8 horas que se trabajan diarias por ley en el día hábil no mas! - Menos las 8 horas que yo le asigne en el). De L a V solo se debe trabajar 8 Horas, Sábados solo 5 horas. Es aquí donde viene mi solicitud. Como puedo saber de acuerdo a la fecha capturada si un día es de Lunes a Viernes para de 8 horas por ley restar las horas asignadas y para saber si un día es sábado para de 5 horas por ley restar las horas asignadas. Tengo 2 opciones para obtener el valor 1) ya sea que al ir capturando se vaya calculando automáticamente las horas libres ò 2) que una vez capturadas las horas asignadas al cargar el formulario se calcule el valor de horas libres con un update por ejemplo: CurrentDb.Execute "update [TRABAJOS] set [TIEMPO LIBRE] = 8-[HORAS ASIGNADAS]"  (esta ultima opción seria fácil si todos los días fueran laborales de 8hrs) se que debo usar if dia de l-V usa 8, if dia es sábado usa 5 con algo pero no se hacerlo.

1 Respuesta

Respuesta
2

Rosario: Ese If ... Then que comentas debes usarlo, sondeando primero si la Fecha es sábado Domingo y de forma simple puedes conseguirlo con la Función WeekDay >>

https://docs.microsoft.com/es-es/office/vba/language/reference/user-interface-help/weekday-function 

Un saludo >> jacinto

¿Gracias jacinto tienes algún ejemplo de la función weekday? ¿Algo sencillo con un campo fecha que selecciones un día del calendario y al perder el foco o dar enter en un botón te muestre en un campo texto el día escogido de esa fecha?

Rosario: No tengo ejemplo publicado que solo tenga eso. Es simple>>

En Formulario pones 2 Cuadros de texto que para el código que te escribo he llamado>>

FechaASondear y DiaSem.

En el evento After:Update de Fecha ASondear pones:

Private Sub FechaASondear_AfterUpdate()
Me.DiaSem = Weekday(Me.FechaASondear, 2)
End Sub

Con fecha de mañana ves que te sale 4

Y para el Sondeo algo así como

Private Sub FechaASondear_AfterUpdate()
Me.DiaSem = Weekday(Me.FechaASondear, 2)
Dim HorasDia As Byte
If Me.DiaSem = 6 Or Me.DiaSem = 7 Then
        HorasDia = 4
Else
        HorasDia = 8
End If
End Sub

Un saludo >>> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas