• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Jaarkalender met foute VBA code

Status
Niet open voor verdere reacties.

Esducsafe

Gebruiker
Lid geworden
2 sep 2009
Berichten
185
In bijgaande jaarkalender (Van o.a. Ole Erland) blijkt dat Hemelvaartsdag en Pinksteren in 2011 niet juist worden weergegeven. In 2012 gaat het goed. Ik denk dat het iets met de maand juni heeft te maken, omdat in 2011 Hemelvaart op donderdag 2 juni valt.Mijn VBA kennis schiet te kort om de fout te vinden. Wie weet raad?
Alvast bedankt.
Met vriendelijke groet.
esko
 

Bijlagen

Het datumsysteem staat op 1904. Kijk bij Extra >> Opties >> Berekenen
 
Het datumsysteem staat op 1904. Kijk bij Extra >> Opties >> Berekenen

Beste Rudi,
Na (nog) een bezoekje Site van Erland vond ik onderstaande opmerking.
Note! The userdefined function above calculates the wrong date for the years 1943, 1957, 1984, 2011, 2038 and 2052.
Of deze fout ooit later is opgelost heb ik nog niet achterhaald. Misschien is een oplossing met de WorksheetFunction niet mogelijk. Heeft misschien iemand anders nog een idee?
Esko

ps onderstaande Excel formule blijkt wel te (zonder VBA) werken.

Code:
=AFRONDEN.BENEDEN(DAG(MINUUT(Datum/38)/2+56)&"/5/"&Datum;7)-34
 
Code:
Function Paasdag(Jaar As Integer) As Date
    
    a = Jaar Mod 19
    b = Fix(Jaar / 100)
    c = Jaar Mod 100
    d = Fix(b / 4)
    e = b Mod 4
    G = Fix((8 * b + 13) / 25)
    theta = Fix((11 * (b - d - G) - 4) / 30)
    phi = Fix((7 * a + theta + 6) / 11)
    psi = (19 * a + (b - d - G) + 15 - phi) Mod 29
    i = Fix(c / 4)
    k = c Mod 4
    lamda = ((32 + 2 * e) + 2 * i - k - psi) Mod 7
    maand = Fix((90 + (psi + lamda)) / 25)
    dag = (19 + (psi + lamda) + maand) Mod 32
    Paasdag = DateValue(dag & "-" & maand & "-" & Jaar)
    
End Function
Met deze bepaal je de exacte Paaszondag
 

Bijlagen

Wat is de zin van al dat gefix ?

a = Jaar Mod 19
b = Jaar \ 100
c = Jaar Mod 100
d = b \ 4
e = b Mod 4
G = (8 * b + 13) \ 25
theta = (11 * (b - d - G) - 4) \ 30
phi = (7 * a + theta + 6) \ 11
psi = (19 * a + (b - d - G) + 15 - phi) Mod 29
i = c \ 4
k = c Mod 4
lamda = ((32 + 2 * e) + 2 * i - k - psi) Mod 7
maand = (90 + (psi + lamda)) \ 25
 
Met behulp van onderstaande code (basis op site Erland gevonden) het WorksheetFunction deel vervangen. De hierboven gemelde fouten zijn nu opgelost. De Feestdagen worden nu op juiste dagen in de kalender zichtbaar.
Mijn vraag zet ik nu op opgelost.
Esko



Code:
Private Function FirstDayOfEaster(InputYear As Integer) As Long
'Function EasterSunday(InputYear As Integer) As Long
' Returns the date for Easter Sunday, does not depend on Excel
Dim d As Integer
    d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
    FirstDayOfEaster = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - _
        ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)

End Function
 

Bijlagen

Laatst bewerkt:
Esko,

Bijgaand een andere kalender voor je.

Beste Rob,
Dank voor je reactie. Je site met intressante oplossingen was mij al bekend. De feestdagen kalander met o.a festiviteiten in Vooorthuizen had ik al gespot en bekeken hoe deze was uitgewerkt.
Met vriendelijke groet.
Esko
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan