aantal werkdagen berekenen tussen 2 data

Status
Niet open voor verdere reacties.

Friend

Verenigingslid
Lid geworden
31 jan 2009
Berichten
1.137
Beste mensen, ik heb ooit (van een Forummer) de volgende code gekregen voor het berekenen van het aantal werkdagen tussen 2 data.
HTML:
=Int((DateDiff("d";[1evakdag];[ltstvakdag]))/7)*5+IIf(Weekday([1evakdag];2)>5;Weekday([ltstvakdag];2);IIf(Weekday([1evakdag];2)>Weekday([ltstvakdag];2);5-(Weekday([1evakdag];2)-Weekday([ltstvakdag];2));(Weekday([ltstvakdag];2)-Weekday([1evakdag];2))))+1
Op zich werkt het aleen als het gaat bv voor de range die vanaf maandag t/m een zondag loopt dan zegt hij altijd 7 ipv 5 werkdagen. Dus dan telt hij de laaste zaterdag en zondag als werkdagen mee. Zodra je van maandag t/m maandag ga klopt het weer wel. Kan iemand mij uithelpen?? Friend
 
Beste forummers, ik vroeg mij af of er nog wijsheid te verkrijgen is voor deze zaak. Het zou mij erg helpen en sommige mensen ook die van 2 extra dagen beroofd worden:p:( Thanks. Friend
 
Probeer het eens met deze functie:

Code:
Function CalcWorkdays(StartDate, EndDate) As Integer
    Dim LTotalDays As Integer
    Dim LSaturdays As Integer
    Dim LSundays As Integer

    On Error GoTo Err_Execute

    CalcWorkdays = 0

    If IsDate(StartDate) And IsDate(EndDate) Then
        If EndDate <= StartDate Then
            CalcWorkdays = 0
        Else
            LTotalDays = DateDiff("d", StartDate - 1, EndDate)
            LSaturdays = DateDiff("ww", StartDate - 1, EndDate, 7)
            LSundays = DateDiff("ww", StartDate - 1, EndDate, 1)
            'Workdays is the elapsed days excluding Saturdays and Sundays
            CalcWorkdays = LTotalDays - LSaturdays - LSundays
        End If
    End If

    Exit Function

Err_Execute:
    'If error occurs, return 0
    CalcWorkdays = 0

End Function
 
Bedankt :thumb: OctaFish. Voor mij om het te begrijpen moet ik dit plaatsen in een module zo ja hoe stuur ik dit dan aan in het veld waar het aantal dagen in moet komen staan of plaats ik dit gewoon als een gebeurtenis eigenschap in b.v. datum2, bij verlaten?
Mijn proefvelden zijn even "datum1", "datum2" en "CalcWorkDays" Thanks again. Friend
 
De code zet je inderdaad in een module. Vervolgens roep je de code aan in een query.

Werkdagen: CalcWorkdays(CDate([Datum1]);IIf([Datum2] Is Null;Date();[Datum2]))
 
OctaFish, Ik zal het wel verkeerd uitwerken maar bij mij wordt het saldo 0 ! :shocked:. Als bijlage mijn proefdatabaseje. Is het mogelijk dat je er naar kan kijken ? Hoor graag waar ik de mist in ga. Bedankt voor je support again. Friend
 

Bijlagen

Ik open je voorbeeld, en de berekening/uitkomst die je in de query hebt gemaakt geeft een prima uitkomst!
 
OctaFish, I'm totaly confused ! :confused::confused: Bij mij staat bij alle data bij de invoer (in de Query) : 0 ! Wat kan er dan bij mij fout zijn als ik jou het bestand opstuur ???? Enig idee ???? Ik gebruik Access 2002 serv pack 3. Heb ook nog mijn zip file op helpmij geopend en dak krijg ik ook als resultaat in de query : 0. Friend
 
Laatst bewerkt:
Kijk eens naar de plaatjes, en kijk eens wat je zelf hebt. Ik heb wel andere datums ingevoerd.
 

Bijlagen

  • Query ontwerp.webp
    Query ontwerp.webp
    13,4 KB · Weergaven: 169
  • Query Resultaatjpg.webp
    Query Resultaatjpg.webp
    5,4 KB · Weergaven: 116
OctaFish, Bij deze mijn screenshots. Ik kan ?? geen verschil zien. Ik gebruik dus Access 2002 servp 3. Zou daar een oorzaak in kunnen liggen? Friend
 

Bijlagen

  • Queryontwerp.webp
    Queryontwerp.webp
    20,9 KB · Weergaven: 98
  • Queryuitkomst.webp
    Queryuitkomst.webp
    23,9 KB · Weergaven: 83
Kun je in de functie een onderbrekingspunt plaatsen volgens plaatje (in de regel staan en op <F9> drukken) en dan de query nog eens draaien?
Let dan vooral op of de functie goed wordt doorlopen, en controleer met de muis (boven de variabelen houden) of er goede berekeningen worden gemaakt.
 

Bijlagen

  • Functie Controle.webp
    Functie Controle.webp
    34,8 KB · Weergaven: 107
OctaFish, Bij het opnieuw draaien van de Query krijg ik het volgende scherm.
In de tussentijd heb ik opnieuw een testdatabaseje gemaakt en hierin werkt alles wel goed. Onbegrijpelijk toch?! Friend
 

Bijlagen

  • controle.webp
    controle.webp
    57 KB · Weergaven: 97
  • datber.zip
    datber.zip
    9,8 KB · Weergaven: 56
Ik zie in jouw functie wel een punt staan op het onderbrekingspunt. Het zou kunnen, dat hij daar op stukloopt, en dan doorgaat naar de Err_procedure. En die zet de waarde op 0. Kan dat kloppen?
 
OctaFish, Bij deze een nieuwe printscreen. Het zegt jouw meer dan mij denk ik. Die punt zag ik ook op de oude printscreen. Opnieuw onderbrekingspunt ingesteld en dan is hij weg. Friend
 

Bijlagen

  • controle1.webp
    controle1.webp
    56,8 KB · Weergaven: 91
Een melding die ik ook niet snap :confused: 't Is niet echt een spannend commando!
Maar goed als hij nu werkt, dan werkt-ie... toch?
 
Ja fantastisch. OctaFish ook vandaag maar weer bedankt voor je hulp :thumb: Het is genoeg voor vandaag. Morgen is er weer een dag. :) Friend
 
OctaFish, ik stuit nog op een kleine error ivm het feit dat ik niet in mijn datebase met datum1 en datum2 werkt en het verschil daartussen. Ik gebruik nl : "1evakdag" en het veld "ltstvakdag". Als de 1evakdag gelijk is aan de ltstvakdag dan is de uitkomst volgens de query 0. Dit los ik nu op door in het veld bij besturingselementbron de volgende instructie te plaatsen :
HTML:
=IIf([1evakdag]=[ltstvakdag];+1+[werkdagen];+[werkdagen])
. Denk jij dat dit ook nog in de module te vatten is ?? Friend
 
Ik snap niet helemaal wat je wilt... Als de dagen gelijk zijn, dan wil je 1 als uitkomst? Wil je dan niet dat de einddatum altijd wordt meegenomen? Want dat lijkt dan logischer... Nu zou bij gelijke datum het verschil 1 zijn, en als de einddatum 1 dag na de begindag ligt, het verschil ook 1.
 
OctaFish, Het verdient wat meer uitleg van mij. Excuus. Met de module wordt nu het verschil aangegeven tussen datum1 en datum2. Dus invoer van bv : 12-03-2010 en 12-03-2010 geeft als uitkomst : 0. Invoer van bv : 12-03-2010 en 13-03-2010 geeft als uitkomst : 1. Wat op zich natuurlijk ook helemaal waar is en klopt. Alleen in mijn database met verlofdagen is de einddatum ook nog een verlofdag. (Het is dus niet de datum van werkhervatting maar de laatste datum dat men vrij is) Dus als ik nu invul : 1evakdag 12-03-2010 ltstvakdag 12-03-2010 (het gaat immers alleen maar om de 12e, deze is de eerste en ook gelijk de laatste vak dag. Dan geeft hij als uitkomst : 0 dagen.
Ik hoor graag van je als het nog te wazig is voor je. Hartelijk dank. Friend
 
Dan wil je dus inderdaad dat bij elke berekening een waarde 1 wordt opgeteld... Op zich ook wel logisch natuurlijk, want feitelijk begint je dag om 0:00, en eindigt hij om 23:59 (grofweg gezegd). In Access is een datum feitelijk een dag die om 0:00 uur begint. Dat geldt dus voor begintijd, en voor eindtijd.
Deze aanpassing zou voldoende moeten zijn:

Code:
        If EndDate <= StartDate Then
            [B][COLOR="Blue"]CalcWorkdays = 1[/COLOR][/B]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan