Avatar billede jensen363 Forsker
20. januar 2009 - 17:21 Der er 10 kommentarer og
1 løsning

Start ugenr med lørdag

Til beregning af hvor mange dage der er i hver uge, benytter jeg nedenstående funktion :

Function DaysInWeek(StartDate As Date, EndDate As Date, WeekNo As Integer) As Integer

Dim RunningDate As Long
DaysInWeek = 0
If EndDate > StartDate Then
    RunningDate = StartDate
    Do While RunningDate <= EndDate
        If DatePart("ww", RunningDate) = WeekNo Then
            DaysInWeek = DaysInWeek + 1
        End If
        RunningDate = RunningDate + 1
    Loop
End If

End Function

Jeg har behov for at beregningen foretages fra lørdag til lørdag, og ikke som nu søndag til søndag.

Hvordan gøres det ?
Avatar billede mugs Novice
20. januar 2009 - 17:26 #1
Kan du ikke bruge funbktionen Weekday, hvor du kan markere hvilken dag er den første i ugen. LØR er = 7
Avatar billede fdata Forsker
20. januar 2009 - 23:55 #2
DatePart kan tage op til 4 parametre:

  DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

firstdayofweek defaulter til søndag (vbSunday). Brug vbSaturday.

Pas i øvrigt på: Access har problemer med beregning af ugenr. Din kode vil sikkert svigte omkring årsskiftet et af de kommende år. Det var i hvert fald tilfældet i 2003 og 2007. For at være helt sikker, er du nødt til at lave en workaround i stil med:

Function KorrektUgeNr(Dato As Date) As Integer
  Dim UgeNr As Integer
  Dim DagNr As Integer

  UgeNr = Val(Format(Dato, "WW", vbMonday, vbFirstFourDays))
  DagNr = Val(Format(Dato, "W", vbMonday, vbFirstFourDays))
  If (UgeNr > 52) And (DagNr < 4) Then
    UgeNr = 1
  End If
  KorrektUgeNr = UgeNr
End Function
Avatar billede jensen363 Forsker
23. januar 2009 - 10:21 #3
fdate > læg venligst et svar ... og tak for hjælpen
Avatar billede jensen363 Forsker
23. januar 2009 - 15:12 #4
fdata >

Hvordan ville min kode se ud, hvis jeg skal kende antallet af dage/registreringer på enkeltdatoer ?
Avatar billede fdata Forsker
25. januar 2009 - 18:12 #5
Øhm. Jeg er ikke helt med. Prøv lige at forklare "antallet af dage/registreringer på enkeltdatoer"
Avatar billede jensen363 Forsker
26. januar 2009 - 08:38 #6
Eksempel :

Jeg har 500.000 registreringer for 2008 med en startdato og antal dage frem

Reg 1  01-01-2008    7
Reg 2  01-01-2008    7
Reg 3  02-01-2008    7
....

Den 1/1 er der altså 2 dage/rebistreringer
Den 2/1 er der 3
Den 3/1 er der 3
osv.
Avatar billede fdata Forsker
26. januar 2009 - 22:54 #7
Tjah. Det er jo en helt anden - og mere tricky - sag. Jeg er bange for at du skal have splittet de enkelte records op i et antal, der svarer til "antal dage". I dit eksempel vil hver record altså give 8 records.

Opret en tabel ved navn Datoer med 2 felter
- ID (Autonummerering)
- Dato (Dato og klokkeslæt)

Kør så:

Sub DanDatoer()
  Dim IndRst As Recordset
  Dim UdRst As Recordset
  Dim i As Integer
 
  Set IndRst = CurrentDb.OpenRecordset("Registreringer")
  Set UdRst = CurrentDb.OpenRecordset("Datoer")
 
  With IndRst
    Do Until .EOF
   
      For i = 0 To .Fields("AntalDage")
        UdRst.AddNew
        UdRst.Fields("Dato") = IndRst.Fields("Dato") + i
        UdRst.Update
      Next i
     
      .MoveNext
    Loop
  End With
  IndRst.Close
  UdRst.Close
  Set IndRst = Nothing
  Set UdRst = Nothing
End Sub

(ret selv tabel- og feltnavne)

Herefter opretter du en forespørgsel, der ser på tabellen Datoer.
- Træk de to felter ned i gitteret
- Klik på sigma-knappen (omdan til sum-forespørgsel)
- Under ID vælger du Antal
- Under Dato vælger du Grupper efter (og Sorter stigende)
- og så fyrer du den af ...
Avatar billede jensen363 Forsker
27. januar 2009 - 15:40 #8
Takker for hjælpen
Avatar billede fdata Forsker
27. januar 2009 - 19:39 #9
Velbekomme og tak for point ;o)
Avatar billede jensen363 Forsker
20. februar 2011 - 17:37 #10
fdata >
jeg kan se at du er mester for den modulkode jeg nu er løbet ind i problemer med. Hvis summen af Fields("AntalDage") er negativt behandles rækken ikke :-(

Det er først for nyligt jeg er begyndt at behandle negative data, så det har ikke været aktuelt da vi lavede koden i sin tid, men det det desværre nu.

En registering består/kan bestå af en tilgang på et tidspunkt og i nogen tilfælde en afgang på et andet tidspunkt ...

Dvs. jeg kan have en tilgang med en given ordre dato/periode som skal tælle 1 hvor hver dag i perioden, og tilsvarende -1 i samme periode på et andet ordretidspunkt hvis kunden efterfølgende annullerer ordren ...

Det er lige som om at negative værdier ignoreres i den hidtidige modulkode
Avatar billede jensen363 Forsker
20. februar 2011 - 18:33 #11
Fik hjælp ... så ingen panik :-)

FOR i= 0 TO ABS(.Fields("AntalDage"))
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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