Funcion que suma dias habiles...

09/02/2005 - 02:47 por pepesoto | Informe spam
Hola expertos, agradezco su orientacion. Cuando doy vacaciones a mis
trabajadores se las doy sobre dias laborales, o sea, no se toma en
cuenta su dia de descanso (domingos x ejemplo) ni los dias festivos de
descanso obligatorio x ley.

Por ejemplo: Un trabajador le tocan 17 dias de vacaciones, descansa los
sabados, un dia festivo es el 5 de febrero, entonces:

Dia 1 de vacaciones: 17 enero 2005. El dia 17 de vacaciones seria el 4
febrero (recuerden que el sabado no se cuenta x ser su dia de desc).
Los dias de descanso que se atraviesan son el sab 22, 29 ene y 5 feb,
que de casualidad es festivo tambien (mala suerte). Debe regresar al
trabajo el 6 de febrero.

Esta funcion que me regalo Cesar Mera de Colombia intenta hacer este
calculo:

Option Explicit

'Funcion que suma los dias habiles de vacaciones
'** ARGUMENTOS
'Fecha_Inicial = fecha a partir de la cual se empieza a contar
'Dias_Laborables = numeros de dias de vacaciones que le tocan que se
quieren contar
'Dias_Festivos = dias a omitir en la cuenta como fechas especiales
'Omitir_Dias = dia a omitir como dia de la semana de descanso
' Domingo = 1
' Lunes = 2
' etc...
' Sabado = 7

'Devuelve el dia habil siguiente como fecha
Public Function Dia_Laborable(ByVal Fecha_Inicial As Date, _
ByVal Dias_Laborables As Integer, _
ByVal Dias_Festivos As Range, _
ByVal Omitir_Dias As Range) As Date
Dim co1 As Integer
Dim r As Range
Dim Esfestivo As Boolean
Dim EsOmitido As Boolean
Dim Direccion As Integer

'Los dias laborables no pueden ser cero
If Dias_Laborables <> 0 Then
'Para saber si aumenta o disminuye la fecha
Direccion = 1
If Dias_Laborables < 0 Then Direccion = -1
Do
Esfestivo = False
EsOmitido = False
'Aumentamos o disminuimos en uno la fecha inicial
Fecha_Inicial = Fecha_Inicial + Direccion
'Buscamos en los dias festivos
For Each r In Dias_Festivos
If r.Value = Fecha_Inicial Then
'Si es festivo sale del ciclo
Esfestivo = True
Exit For
End If
Next r
'Si es festivo no es necesario buscar en dias omitidos
If Not Esfestivo Then
'Buscamos en dias omitidos en caso de que no sea festivo
For Each r In Omitir_Dias
If r.Value = Weekday(Fecha_Inicial) Then
'Si es omitido salimos del ciclo
EsOmitido = True
Exit For
End If
Next r
End If
'NO deber ser festivo ni omitido para incrementar
If Not Esfestivo And Not EsOmitido Then
co1 = co1 + 1
End If
DoEvents
'Continuamos mienstras sea menor a los dias_laborables
Loop While co1 < Abs(Dias_Laborables)
'Asignamos la fecha encontrada a la funcion
Dia_Laborable = Fecha_Inicial
Else
'Si es cero devuelve un error tipo #!VALOR¡
Dia_Laborable = ""
End If

End Function

El problema es que esta funcion me devuelve como fecha final el dia 6
de febrero, en lugar del 4. Es decir suma dias al final, y no
encuentro el por qué... Se que esta ahi pero no lo veo. Gracias
anticipadas...
 

Preguntas similares