Avatar billede dimsushi Nybegynder
08. august 2006 - 23:22 Der er 3 kommentarer og
1 løsning

Udskriv "07-08-2006 til 13-08-2006" ud fra ugetal

Hejsa :)

Jeg så et spørgsmål i php sektionen som jeg faktisk også har forsøgt at løse i VBA (Excel). Jeg har en sub knyttet til en knap. Når man trykker på den knap skal subben spørge brugeren om et ugenummer (kan jeg sagtens), men også finde startdatoen i denne uge og gerne også slutdatoen. Hvordan gør jeg det? :S

Hvordan kan jeg udskrive data_fra - dato_til ud fra et ugenummer (f.eks. "07-08-2006 til 13-08-2006")

Håber nogen kan hjælpe. :)
Avatar billede kjulius Novice
09. august 2006 - 00:58 #1
En funktion som denne, vil give dig startdatoen:

Function ugestart(ugenr As Integer, Optional Årstal As Variant) As Date
    Dim workDate As Date
    Dim workUge As Integer
    Dim workÅr As Integer
    If IsMissing(Årstal) Then
        workÅr = Year(Date)
    Else
        If Not IsNumeric(Årstal) Then
            workÅr = Year(Date)
        Else
            workÅr = Årstal
        End If
    End If
       
    workDate = DateSerial(workÅr, 1, 1)
    If Weekday(workDate, vbUseSystemDayOfWeek) > 1 Then
        workDate = DateAdd("d", 8 - Weekday(workDate, vbUseSystemDayOfWeek), workDate)
    End If
    ' workdate indeholder nu årets første mandag...
    workUge = CInt(Format(workDate, "ww", vbUseSystemDayOfWeek))
    ' Efter europæisk standard er uge 1 den første uge i året, hvor med en torsdag.
    If Weekday(DateSerial(workÅr, 1, 1), vbUseSystemDayOfWeek) > 4 Then
        workUge = workUge - 1
    End If
    ugestart = DateAdd("ww", ugenr - workUge, workDate)
End Function

Den kan man kalde med en eller to parametre. Hvis man ikke angiver et årstal, bruges indeværende år.

?ugestart(27)
03-07-2006

Når man først har startdatoen er det jo let nok at angive slutdatoen, da det må være startdatoen + 6 dage:

?ugestart(27) & " til " & DateAdd("d", 6,ugestart(27))
03-07-2006 til 09-07-2006

Eller, hvis du også angiver året:

?ugestart(27,2005) & " til " & DateAdd("d", 6,ugestart(27,5))
04-07-2005 til 10-07-2005

(bemærk, at året kan angives både som 5 og 2005)
Avatar billede kjulius Novice
09. august 2006 - 01:18 #2
Ved nærmere eftertanke burde jeg nok for en sikkerheds skyld have brugt vbMonday i stedet for vbUseSystemDayOfWeek. På en dansk windows installation er der ingen forskel, da en uge her er sat til at starte på en mandag. Men man kan jo ikke være absolut sikker på, at der ikke er blevet pillet ved standardinstillingerne. Hvis man derfor vil være absolut sikker på, at beregningerne er rigtige, så erstat vbUseSystemDayOfWeek med vbMonday:

Function ugestart(ugenr As Integer, Optional Årstal As Variant) As Date
    Dim workDate As Date
    Dim workUge As Integer
    Dim workÅr As Integer
   
    'Hvis årstallet ikke er specificeret eller ikke er numerisk, bruges indeværende år
    If IsMissing(Årstal) Then
        workÅr = Year(Date)
    Else
        If Not IsNumeric(Årstal) Then
            workÅr = Year(Date)
        Else
            workÅr = Årstal
        End If
    End If
       
    workDate = DateSerial(workÅr, 1, 1)
    If Weekday(workDate, vbMonday) > 1 Then
        workDate = DateAdd("d", 8 - Weekday(workDate, vbMonday), workDate)
    End If
   
    ' workdate indeholder nu årets første mandag...
    workUge = CInt(Format(workDate, "ww", vbMonday))
   
    ' Efter europæisk standard er uge 1 den første uge i året med en torsdag.
    If Weekday(DateSerial(workÅr, 1, 1), vbMonday) > 4 Then
        workUge = workUge - 1
    End If
   
    ugestart = DateAdd("ww", ugenr - workUge, workDate)
End Function
Avatar billede dimsushi Nybegynder
09. august 2006 - 16:39 #3
Jeg takker mange gange. Skulle lige tilpasse en smule til det jeg skulle men hele ideen var der. :) Smid et svar og få dine point.
Avatar billede kjulius Novice
09. august 2006 - 19:06 #4
Takker...
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