'Función que comprueba si una fecha es válida. Devuelve:
' 0 -> si es nula o esta vacía
' 1 -> Si la fecha es incorrecta
' 2 -> Si la fecha es válida
' Parámetros:
' Fecha -> contiene la fecha que vamos a validar
' Tipo -> Variable que determina el tipo de fecha a validar. Puede ser:
' 0 -> Cualquier fecha
' 1 -> Entre el año actual menos 100
Function Validar_Fecha(Fecha, Tipo) As byte
Dim Con, Dia, Mes, Anyo
If Trim(Fecha) <> "" Then
If Len(Fecha) <> 10 Then
Validar_Fecha = 1
Exit Function
End If
If Mid(Fecha, 3, 1) <> "/" And Mid(Fecha, 6, 1) <> "/" Then
Validar_Fecha = 1
Exit Function
End If
For Indice_Fecha = 1 To Len(Fecha)
If Indice_Fecha <> 3 And Indice_Fecha <> 6 Then
If Not IsNumeric(Mid(Fecha, Indice_Fecha, 1)) Then
Validar_Fecha = 1
Exit Function
End If
End If
Next
Dia = CInt(Mid(Fecha, 1, 2))
Mes = CInt(Mid(Fecha, 4, 2))
Anyo = CInt(Mid(Fecha, 7, 4))
Select Case Mes
Case 1, 3, 5, 7, 8, 10, 12:
If Dia < 1 Or Dia > 31 Then
Validar_Fecha = 1
Exit Function
End If
Case 4, 6, 9, 11:
If Dia < 1 Or Dia > 30 Then
Validar_Fecha = 1
Exit Function
End If
Case 2:
If ((Anyo Mod 4) = 0 Or (Anyo Mod 100) = 0) And (Anyo Mod 400) <> 0 Then
If Dia < 1 Or Dia > 29 Then
Validar_Fecha = 1
Exit Function
End If
Else
If Dia < 1 Or Dia > 28 Then
Validar_Fecha = 1
Exit Function
End If
End If
Case Else:
If Mes < 1 Or Mes > 12 Then
Validar_Fecha = 1
Exit Function
End If
End Select
If Anyo < (Year(Now) - 100) And Tipo = 1 Then
Validar_Fecha = 1
Exit Function
End If
Validar_Fecha = 2
Else
Validar_Fecha = 0
Exit Function
End If
Validar_Fecha = 2
End Function