Fecha de publicación: 02/11/2014
Esta función nos calcula la fecha de de vencimiento de una factura según estos parámetros:
Fecha de Factura: Fecha de emisión de la factura
Vencimiento en días: Son el plazo de días desde la emisión de la factura en los cuales podremos cobrar la factura.
Días de pago: Los posibles días en los cuales podramos cobrar la factura. Se pueden introducir 3 posibles días de pago pero sólo uno es obligatorio.
Public Function Fecha_Vencimiento(Fecha_Inicio As Date, Días As Integer, Pago1 As Integer, Optional Pago2 As Integer, Optional Pago3 As Integer) As Date
Dim d As Integer, m As Integer, y As Integer, i As Integer, n As Date, Aux() As Integer, pos As Integer, ultimo As Integer
If Días <= 0 Then
n = Fecha_Inicio
Else
n = Fecha_Inicio + Días
If Pago1 = 0 Then
Else
i = 1
ReDim Aux(i) As Integer
Aux(i - 1) = Pago1
If Pago2 > 0 Then
i = i + 1
ReDim Preserve Aux(i) As Integer
Aux(i - 1) = Pago2
End If
If Pago3 > 0 Then
i = i + 1
ReDim Preserve Aux(i) As Integer
Aux(i - 1) = Pago3
End If
d = Day(n)
For i = 0 To UBound(Aux) - 1
If d <= Aux(i) Then
pos = Aux(i)
Exit For
End If
Next i
If pos <> 0 Then
m = Month(n)
y = Year(n)
n = CDate(pos & "/" & m & "/" & y)
Else
m = Month(n)
y = Year(n)
If m = 12 Then
m = 1
y = y + 1
Else
m = m + 1
End If
ultimo = Devolver_Ultimo_Dia_Mes(m, y)
If Aux(0) > ultimo Then
Aux(0) = ultimo
End If
n = CDate(Aux(0) & "/" & m & "/" & y)
End If
End If
End If
Fecha_Vencimiento = n
End Function
Private Function Devolver_Ultimo_Dia_Mes(Mes As Integer, Año As Integer) As Integer
Select Case Mes
Case 4, 6, 9, 11
Devolver_Ultimo_Dia_Mes = 30
Case 2
If Año Mod 100 = 0 Then
Devolver_Ultimo_Dia_Mes = 28
ElseIf Año Mod 4 = 0 Then
Devolver_Ultimo_Dia_Mes = 29
Else
Devolver_Ultimo_Dia_Mes = 28
End If
Case Else
Devolver_Ultimo_Dia_Mes = 31
End Select
End Function
Fecha de factura: 1/10/14
Vencimiento en días: 30 días
Días de pago: día 7, día 10 o día 15
Dim fvencimiento as Date
fvencimiento=Fecha_Vencimiento(cdate("1/10/2014"),30,7,10,15)