pepesoto
Board Regular
- Joined
- Sep 18, 2002
- Messages
- 53
Hola grupo!
Tengo una funcion que amablemente me obsequio un colega de Colombia (Cesar Mera), la cual funciona perfectamente, pero,
Lo que necesito que haga es:
En A1 = Dia inicial de vacaciones de un trabajador
En A2 = Dias que va a tomar de vacaciones (no cuentan los domingos o el dia de su descanso)
En A3 = Dia final de vacaciones del trabajador (A1 + A2 + Dias de descanso que se atraviesen + dias festivos que se atraviesen)
En A4 = Dia en que debe regresar a trabajar (Un dia despues de A3)
Ejemplo:
A1 = 29/01/2003
A2 = 8
Dias de descanso que se atraviesan: 2 feb 2003
Dias festivos que se atraviesan: 5 feb 2003
Dias totales que tomara: 8 + 2 (2 feb y 5 feb)
A3 = 07/02/2003
A4 = 08/02/2003
La funcion de Cesar me trae el dia en que debe presentarse a laborar el trabajador (A4) y trabaja bien cuando el dia de descanso es el domingo, pero no funciona cuando el dia de descanso es cualquier otro dia...
He aqui la funcion:
Function DiaLab_conSabados(inicial As Date, dias As Integer, festivos As Range) As Date
'Función elaborada por Cesar Mera
'Version 2.0 18/02/2003
Dim final As Date
If festivos.Columns.Count > 1 Then 'Si el rango de fechas de festivos es mayor a
'una columna se arroja el valor de 0
DiaLab_conSabados = final
Exit Function
End If
If Weekday(inicial) = 1 Then inicial = inicial + 1 'Valida que el primer día no sea Domingo
final = inicial + DateDiff("d", inicial, inicial + dias) 'Calcula la fecha final en dias comunes
dia = inicial
Do While dia <= final 'Este loop cuenta cuantos domingos hay en el numero de dias comunes
'y le aumenta ese numero de días a la fecha final
If Weekday(dia) = 1 Then final = final + 1
dia = dia + 1
Loop
If Weekday(final) = 1 Then final = final + 1 'Valida que la fecha final no sea un Domingo
'de ser asi aumenta un día a la fecha final
For Each Row In festivos.Rows 'Cuenta el numero de festivos entre la fecha
If IsDate(Row) Then 'inicial y final y agrega esos días a la fecha final
If inicial <= Row And final >= Row Then
final = final + 1
If Weekday(final) = 1 Then final = final + 1
End If
End If
Next Row
Call valida(final, festivos) 'Valida que la respuesta no sea ni un Domingo ni un festivo
'aumenta fechas hasta que la respuesta sea día hábil
DiaLab_conSabados = final
End Function
Sub valida(final As Date, festivos As Range)
Dim Esfestivo As Boolean
For Each Row In festivos.Rows
If IsDate(Row) And Row = final Then
Esfestivo = True
End If
Next Row
If Weekday(final) = 1 Or Esfestivo Then 'Si la respuesta es Domingo o festivo
final = final + 1 'aumenta un día a la respuesta
Call valida(final, festivos) 'y vuelve a hacer la verificación
End If
End Sub
Lo que entiendo es que "weekday = 1" es el domingo, pero necesitaria tener que poner el dia de descanso para que funcionara con las personas que descansan otro dia en lugar del domingo, ya que tengo un formato de vacaciones a disfrutar que le doy al trabajador con las fechas inicial, final y de regreso a trabajar.
Espero haberme explicado...
Salu2 cordiales a todos...
Jose Antonio Soto
pepesoto@chihuahua.com