Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 13:08 Der er 4 kommentarer og
1 løsning

Find bestemte uger mellem 2 datoer

Hejsa
Jeg er interesseret i at kende ugenumrene på fx. hver tredje uge i en bestemt periode, fx

Startdato = 03-10-2005
Slutdato = 10-02-2006

startugen er i ovenstående uge 40 2005 og slutugen er uge 6 2006
******************
startdato = CDate(rs("Dato"))
startuge = DatePart("ww", startdato, vbMonday, vbFirstFourDays)
slutdato = CDate(rs("DatoSlut"))
slutuge = DatePart("ww", slutdato, vbMonday, vbFirstFourDays)
udskrivtekst_hver_x_uge = 3 'rs("xuge")
tekst = rs("beskrivelse")
******************

I ovenstående exsempel vil jeg gerne udskrive "tekst" hver tredje uge i perioden. Jeg har en løkke der tager en given måned ad gangen og gennem løber ugerne, men hvordan ved jeg om jeg har fat i en uge der er "hver tredje" i ovenstående periode.

I eksemplet vil jeg altså gerne udskrive "tekst" når jeg i min løkke har fat i uge: 40,43,46,49,52 i år 2005 og i uge 3,6 år 2006 

Er det klart hvad mit problem er?
Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 13:22 #1
Jeg forestiler mig en løsning, hvor man først får et array ud med "ugenumrene på hver tredje uge" i perioden også bagefter kan man tjekke om den aktuelle uge er i arrayet.

Jeg ved bare ikke helt hvordan... og hvordan holder man styr på gentagende ugenumre i arrayet, hvis nu perioden er over flere år fx 5 år kan et ugenummer jo godt være i arrayet flere gange...
Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 14:51 #2
Jeg er kommet lidt videre jeg har fået udfyldt 2 array med uger og år:
**************
xuge = CInt(xuge)
tempStartdato = startdatofor_aktuelt_arrangement
Dim arUge()
Redim arUge(1)
Dim arAar()
Redim arAar(1)
arTaeller = 0
                   
arUge(arTaeller) = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
arAar(arTaeller) = Year(tempStartdato)
naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
Do until CDate(tempStartdato) > CDate(slutdatofor_aktuelt_arrangement)
  tempStartdato = CDate(tempStartdato)+7
  tempUge = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
  tempAar = Year(tempStartdato)
  if tempUge = naesteUgeTilArray then
      arTaeller = arTaeller + 1
      Redim Preserve arUge(arTaeller)
      Redim Preserve arAar(arTaeller)
      arUge(arTaeller) = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
      arAar(arTaeller) = Year(tempStartdato)
      naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
  end if
Loop
************************
Nu skal jeg så bare finde ud af at bruge dem :-)
Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 16:08 #3
Jobs done :-)
***********************
xuge = CInt(xuge)
tempStartdato = startdatofor_aktuelt_arrangement
Dim arUge()
Redim arUge(1)
'Dim arAar()
'Redim arAar(1)
arTaeller = 0
                   
arUge(arTaeller) = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
'arAar(arTaeller) = Year(tempStartdato)
naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
Do until CDate(tempStartdato) > CDate(slutdatofor_aktuelt_arrangement)
  tempStartdato = CDate(tempStartdato)+7
  tempUge = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
  tempAar = Year(tempStartdato)
  if tempUge = naesteUgeTilArray then
      arTaeller = arTaeller + 1
      Redim Preserve arUge(arTaeller)
      Redim Preserve arAar(arTaeller)
      arUge(arTaeller) = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)&"_"& Year(tempStartdato)
      'arAar(arTaeller) = Year(tempStartdato)
      naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
  end if
Loop

aktuelUGEforgennemloeb = DatePart("ww", dtmCurDate, vbMonday, vbFirstFourDays)
aktuelAARforgennemloeb = Year(dtmCurDate)
kikefter = aktuelUGEforgennemloeb &"_"&aktuelAARforgennemloeb
udskriv = false

For j = UBound(arUge) to 0 Step - 1
  if arUge(j) = kikefter then
    udskriv = true
    exit for
  end if
Next
***********************

Hvis der er nogle der kan se en bedre og hurtigere måde er jeg lydhør, men ovenstående virker :-)
Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 16:28 #4
Mere effekttivt.. Drop arrays....
******************
xuge = CInt(xuge)
tempStartdato = startdatofor_aktuelt_arrangement

naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
                           
aktuelUGEforgennemloeb = DatePart("ww", dtmCurDate, vbMonday, vbFirstFourDays)
aktuelAARforgennemloeb = Year(dtmCurDate)
kikefter = aktuelUGEforgennemloeb &"_"&aktuelAARforgennemloeb
udskriv = false
                           
Do until CDate(tempStartdato) > CDate(slutdatofor_aktuelt_arrangement)
  tempUge = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays)
  tempAar = Year(tempStartdato)
  tempKikefter = tempUge&"_"&tempAar                       
  if tempUge = naesteUgeTilArray then
    vaerdi_til_array = DatePart("ww", tempStartdato, vbMonday, vbFirstFourDays) &"_"&Year(tempStartdato)
    if vaerdi_til_array = kikefter then
      udskriv = true
      exit do
    else
      naesteUgeTilArray = DatePart("ww", tempStartdato+(xuge*7), vbMonday, vbFirstFourDays)
    end if
    end if
    tempStartdato = CDate(tempStartdato)+7   
Loop
******************
Avatar billede kimlarsen1978 Nybegynder
17. august 2005 - 16:28 #5
Håber andre måske nyde godt af ovenstående - jeg fik jo selv opgaven :-)
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