kommer lige her for god ordens skyld:
Public Function Arbejdsdag(Dato As Date) As Boolean
If Weekday(Dato) = 7 Or Weekday(Dato) = 1 Then
Arbejdsdag = False
ElseIf DCount("*", "Helligdage", "Dato = #" & Format(Dato, "yyyy-mm-dd") & "#") > 0 Then
Arbejdsdag = False
Else
Arbejdsdag = True
End If
End Function
Public Function FindAntalArbejdsdage(Startdato As Date, Slutdato As Date) As Long
Dim tmpDato As Date
Dim n As Integer
tmpDato = Startdato
Do Until tmpDato >= Slutdato
If Arbejdsdag(tmpDato) Then
n = n + 1
End If
tmpDato = tmpDato + 1
Loop
FindAntalArbejdsdage = n
End Function
Afhængig af gnst. afstand mellem datoerne: Hvis den er høj, kan du jo udnytte, at hver 7. dag er lørdag og/eller søndag. Så er det ikke nødvendigt at spørge på alle datoer. Hvis der typisk er giga-mange datoer, kan du tælle hvor mange dage der er ialt, og derfra fratrække antallet af lørdage og søndage, samt antallet af helligdage...Koden må du selv fedte med, synes jeg.
Public Function Arbejdsdag(Dato As Date) As Boolean
If Weekday(Dato) = 7 Or Weekday(Dato) = 1 Then
Arbejdsdag = False
else
Arbejdsdag = True
End If
End Function
Public Function FindAntalArbejdsdage(Startdato As Date, Slutdato As Date) As Long
Dim tmpDato As Date
Dim n As Integer
tmpDato = Startdato
Do Until tmpDato >= Slutdato
If Arbejdsdag(tmpDato) Then
n = n + 1
End If
tmpDato = tmpDato + 1
Loop
FindAntalArbejdsdage = n
End Function
det man bruger funktionen til, er at søge efter hvormange arbejdsdage der er mellem d. 15 i denne, og d. 14 i næst-kommende måned. så det er jo ikke et gigastort tal... :)
ferdinand.k> You said that you are not using "Helligedage" table! I have removed it from the loop but as far as I see it you MUST go through each day to see if it is a working day or a weekend (saturday or sunday). I would also have thought that holidays (Easter etc.) would need to be taken into concideration too!
det er ikke nødvendigt med helligdage... jeg skal sådan set kun have antallet af hverdage ud mellem to datoer, oftest med en måneds mellemrum...
Hi Pecl>Gald you can find what I made, I never seem to be able to :o)
Even so there isnt a great difference in either method.
Hvis du ikke synes, at ANTAL.ARBEJDSDAGE er god nok, og hvis ALDRIG medregner helligdage og du ALTID skal beregne fra 15 dennes til 14 næstes, vil jeg påstå at du må kunne udnytte at hver 7.dag er lørdag eller søndag...Der vil altid være 28-31 dage ialt, herunder 4-5 lørdage/søndage - take that, hvis du altså er ude på ekstrem sub-optimering!
En grim, nogle vil sige kinky, variant af 'Arbejdsdag' er iøvrigt:
Public Function Arbejdsdag(Dato As Date) As Boolean
Arbejsdag = Weekday(Dato) <> 7 And Weekday(Dato) <> 1
End Function
Jeg kan ikke lige gennemskue, om du kunne optimere mere ved at lave en
..
Dim a as integer
a=Weekday(dato)
Arbejsdag = a <> 7 And a <> 1
..
herved sparer du jo et kald af Weekday...men det må du næsten selv teste.