martes, 15 de diciembre de 2015

VBA: Enum - enumeración de constantes y el cálculo de las principales festividades durante y después de la Pascua.

Al hilo de la entrada anterior (ver), mostraremos cómo calcular las restantes de festividades religiosas relevantes y variables según la Semana Santa.
Tomados los datos de la web www.divvol.org


Como aplicación especial haremos uso de la instrucción Enum para la enumeración y creación de diferentes constantes...
El sentido de esta instrucción es facilitar nuestro trabajo cuando necesitamos emplear bastantes constantes en nuestros procedimientos, principalmente por que se nos permite emplearlo como si fueran objetos, esto es, el tipo definido seguido del punto y luego del nombre de la constante...
Lo que sin duda evitará errores en la sintaxis y uso de dichas constantes.


Un ejemplo sencillo, si vamos a trabajar con tres constantes, podemos escribir:
Public Const rojo = 1
Public Const verde = 2
Public Const azul = 3

pero sería más práctico y seguro trabajar con la lista enumerada:
Public Enum colores
rojo = 1
verde = 2
azul = 3
End Enum

A lo largo de nuestro procedimiento, para recuperar el valor de la constante, podríamos emplear la forma:
colores.rojo


Para resolver nuestra cuestión en particular, crearemos una función personalizada en VBA para tal fin, insertando nuestro código dentro de un módulo estándar desde el editor de VB:

Public Enum dias
    DomPascua = 0
    MiéCeniza = -46
    DomRamos = -7
    Ascensión = 40
    DomAscensión = 43
    Pentecostés = 50
    SantísimaTrinidad = 57
    CorpusChristi = 61
    DomCorpusChristi = 64
End Enum

Function FechaSemanaSanta(año As Integer, FechaSanta As String) As Date
'otros días variables durante y después de la Pascua
'http://www.divvol.org/recursos/fecha_pascua.htm
Dim Ndias As dias

Application.Volatile

Select Case FechaSanta
    Case Is = "DomPascua": Ndias = dias.DomPascua
    Case Is = "MiéCeniza": Ndias = dias.MiéCeniza
    Case Is = "DomRamos": Ndias = dias.DomRamos
    Case Is = "Ascensión": Ndias = dias.Ascensión
    Case Is = "DomAscensión": Ndias = dias.DomAscensión
    Case Is = "Pentescostés": Ndias = dias.Pentecostés
    Case Is = "SantísimaTrinidad": Ndias = dias.SantísimaTrinidad
    Case Is = "CorpusChristi": Ndias = dias.CorpusChristi
End Select
FechaSemanaSanta = DomingoPascua(año) + Ndias

End Function



Como podemos ver en la imagen obtenemos en base a las distintas constantes los días concretos para cada año informado:

No hay comentarios:

Publicar un comentario en la entrada