Questo articolo fa parte del corso su Access. Puoi trovare la guida completa e tutte le lezioni qui: https://informatica.rgpsoft.it/corso-access
Introduzione
Il web offre numerosi siti che permettono di calcolare il giorno di Pasqua a partire dall’anno, insieme a molti altri strumenti di calcolo. In questa lezione vedremo come implementare una funzione VBA per calcolare la data della Pasqua direttamente in Microsoft Access, funzione che può essere facilmente riutilizzata anche in qualsiasi programma scritto in Visual Basic, con minime modifiche.
Nei software gestionali dedicati alla pianificazione del lavoro degli operai è importante conoscere questa data anno per anno, perché la Pasquetta è l’unico giorno festivo mobile del calendario italiano.
La data della Pasqua viene determinata come:
la prima domenica dopo il primo plenilunio successivo all’equinozio di primavera, fissato convenzionalmente al 21 marzo.
Da questa regola si deduce che la data è calcolabile matematicamente, perché segue il ciclo delle fasi lunari, che ha una periodicità fissa di 19 anni (ciclo metonico). Possiamo quindi implementare una funzione che restituisca la data esatta.
Preparazione dell’ambiente in Access
- Creiamo un nuovo database Access.
- Inseriamo una maschera in visualizzazione struttura.
- Aggiungiamo:
- una casella di testo per inserire l’anno;
- una casella di testo per mostrare la data calcolata;
- un pulsante per avviare il calcolo.
Implementazione
A questo punto possiamo scrivere la nostra funzione VBA per determinare il giorno di Pasqua.
Public Function CalcEaster(iAnno As Integer) As String
Dim arrGm, arrDa As Variant,
iA, iB, iC, iD, iE, iG As Integer
Dim iDay, iMonth As Integer
arrGm = Array(22, 22, 23, 23, 24, 24)
arrDa = Array(2, 2, 3, 4, 5, 5)
iA = iAnno Mod 19
iB = iAnno Mod 4
iC = iAnno Mod 7
iD = CInt((iAnno / 100) - 15)
iE = (19 * iA + arrGm(iD)) Mod 30
iG = (2 * iB + 4 * iC + 6 * iE + arrDa(iD)) Mod 7
iDay = 22 + iE + iG
iMonth = 3
If iDay > 31 Then
iMonth = 4
iDay = iDay - 31
End If
CalcEaster = CStr(iDay) + "/" + CStr(iMonth) + "/" +
CStr(iAnno)
End Function
Come si può osservare, l’intero calcolo si basa su valori fissi organizzati in due array: uno per il ciclo lunare di 19 anni e uno per la gestione degli anni bisestili, che aggiungono un giorno in più al conteggio. Il resto dell’algoritmo deriva dalle numerose formule disponibili sul web; tra queste ho scelto quella più semplice e compatta, ideale per essere implementata in VBA.
Nella parte finale del calcolo verifichiamo se il giorno ottenuto supera il valore 31: in tal caso la data appartiene al mese di aprile, e quindi sottraiamo 31 per ottenere il giorno corretto. Questo perché la Pasqua può cadere esclusivamente nei mesi di marzo o aprile, mai oltre.
<< Lezione Precedente – Lezione Successiva >>
Vuoi continuare il percorso? Torna alla guida generale del corso su Access: https://informatica.rgpsoft.it/corso-access


