Sumar días Hábiles

 Principal Novedades Utilidades Código Enlaces Access Acerca de mí

     
 
Principal
Arriba

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SumaHabiles

Existen plazos, para presentar un documento, para hacer una reclamación..., que se cuentan en días hábiles, que, en principio, no son distintos que los días laborables, es decir, días no festivos, aunque en ocasiones se consideran hábiles los sábados y en otras no.

Esta función calcula la fecha resultante a sumarle días hábiles a una determinada fecha. La manera más fácil de calcularlo es hacer un bucle en el que se añade un día y se comprueba si es sábado, domingo o festivo antes de hacer correr el contador, sin embargo, como casi siempre que se utilizan bucles, el rendimiento es el peor posible. En este caso lo que hacemos es sumar los días a la fecha, calcular los días no hábiles que hay hasta el final y añadirlos, pero, como en esos días que añadimos puede haber también días no hábiles, hacemos una llamada recursiva a la función hasta que deje de haberlos.

 

'---------------------------------------------------------------------------------------
' Procedure : SumaHabiles
' DateTime  : 07/10/05
' Author    : José Bengoechea Ibaceta(Chea)
' Purpose   : Suma días hábiles a una fecha pera obtener una fecha de fin de plazo
'            Estás autorizado a utilizar este código dentro de una aplicación
'            siempre que esta nota de autor permanezca inalterada.
'            En el caso de querer publicarlo en una página Web, por favor,
'            contactar con el autor en
'
'                 UA@bengoechea.net
'---------------------------------------------------------------------------------------
Public Function SumaHabiles(fechaInicio As Date, Totaldías As Long, Optional _
    SabadoNoHabil As Boolean)
Dim fechatemp As Date, Sabados As Long, Domingos As Long, Festivos As Long
fechatemp = DateAdd("d", Totaldías, fechaInicio)
If SabadoNoHabil Then
    Sabados = DateDiff("ww", fechaInicio, fechatemp, vbSaturday)
End If
'Ahora contamos los domingos de ese periodo; se los tendremos que sumar
Domingos = DateDiff("ww", fechaInicio, fechatemp, vbSunday)
Festivos = DCount("*", "Festivos", "[fecha] between #" & Format(fechaInicio + 1, _
    "mm-dd-yy") & "# and #" & Format(fechatemp, "mm-dd-yy") & "#")
' Como en los días añadidos tambén puede haber sábados, domingos y festivos,
' lo mejor es usar una llamada recursiva a SumaHábiles para
' añadirlos
If Sabados > 0 Or Domingos > 0 Or Festivos > 0 Then
    fechatemp = SumaHabiles(fechatemp, Sabados + Domingos + Festivos, _
        SabadoNoHabil)
End If
SumaHabiles = fechatemp
End Function