Avatar billede prince10 Nybegynder
15. september 2006 - 00:30 Der er 3 kommentarer og
1 løsning

DateAdd - uden weekend

Jeg har flg funktion, som jeg kalder med eksempelvis
dags dato og 10
Public Function WorkingDays(ByVal dDate As Date, ByVal lInterval As Long) As Date
        Dim x As Long ' Count of Working Days
        Dim y As Long ' Count of actual Days
        Dim dNewDate As Date ' The date being checked
        Do Until x = lInterval
        dNewDate = DateAdd("w", y - 1, dDate)
If Not Weekday(dNewDate) = vbSunday And Not Weekday(dNewDate) = vbSaturday Then
              x = x - 1
            End If
            y = y + 1
        Loop
        WorkingDays = DateAdd("w", y, dDate)
    End Function

Den finder datoen (med eksemplet dagsdato og 10) på 10'ende dag fremad og springer over lørdag og søndag.
Hvordan får jeg den lige til at gå tilbage - Den fejler hvis jeg sætter -10 istedet...
Avatar billede nielle Nybegynder
15. september 2006 - 07:05 #1
Et bud:

    Public Function WorkingDays(ByVal dDate As Date, ByVal lInterval As Long) As Date
        Dim x As Long ' Count of Working Days
        ''' Dim y As Long ' Count of Actual Days
        Dim dNewDate As Date ' The date being checked

        Dim dayStep As Integer
        If lInterval >= 0 Then
            dayStep = 1
        Else
            dayStep = -1
        End If

        dNewDate = dDate
        Do Until x = lInterval
            dNewDate = DateAdd("w", dayStep, dNewDate)
            If Not Weekday(dNewDate) = vbSunday And Not Weekday(dNewDate) = vbSaturday Then
                x = x + dayStep
            End If
        Loop
        WorkingDays = dNewDate
    End Function
Avatar billede prince10 Nybegynder
15. september 2006 - 09:38 #2
Takker - det virker perfekt
Avatar billede nielle Nybegynder
15. september 2006 - 10:19 #3
Hmmm? Hvorfortager du så pointene selv?
Avatar billede kjulius Novice
15. september 2006 - 15:33 #4
Ja, det er ikke særligt befordrende for lysten til at hjælpe dig. :-(

-----

Men da jeg går ud fra, at du har gjort det ved en fejl, kommer her endnu et bud på en måde at beregne din dato (uden brug af loops):

Function AddArbejdsdage(startdato As Date, Arbejdsdage As Integer) As Date
    Dim beregnetDato As Date
    Dim wd As Integer
    Dim corrDays As Integer
   
    beregnetDato = DateAdd("d", Int(Arbejdsdage / 5) * 7 + (Arbejdsdage Mod 5), startdato)
   
    ' Beregn evt. nødvendig korrektion for weekenden...
    wd = Weekday(beregnetDato, vbSaturday)
    If wd > 2 Then
        corrDays = 0
    ElseIf Arbejdsdage > 0 Then
        corrDays = 3 - wd
    Else
        corrDays = -wd
    End If
   
    'Korriger evt. for weekend...
    If corrDays <> 0 Then
        beregnetDato = DateAdd("d", corrDays, beregnetDato)
    End If
   
    'Returnere den beregnede dato...
    AddArbejdsdage = beregnetDato

End Function

PS: Jeg skal ikke have point, da nielle jo kom først med en funktion der virker. Ham bør du derimod straks belønne med de udsatte 60 point. Det er virkelig kontraproduktivt (= du kan få resten af brugerne på nakken og få svært ved at få hjælp næste gang), ikke at give de lovede point til dem som laver arbejdet, og kommer med en løsning på det stillede problem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Cognizant Technology Solutions Denmark ApS

Test Architect - Projects

SporingsGruppen ApS

Frontend-udvikler

Netcompany A/S

Test Specialist

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS