Avatar billede krasmussen Praktikant
20. november 2003 - 14:34 Der er 10 kommentarer og
1 løsning

Datoberegning udfra År - Ugenummer og Ugedag

Jeg har 3 felter

År - Tal
Uge - Tekst 22, 23, 24 osv. (Værdiliste)
Ugedag - Mandag, Tirsdag osv. (Værdiliste)

Hvordan kan jeg beregne en korrekt dato ud fra disse ?
20. november 2003 - 14:44 #1
Læg denne funktion i et modul. Herefter kan du spørge på den fra f.eks. en forespørgsel eller lign:

Public Function FindDato(År As Integer, Uge As Byte, Dag As Byte) As Date
  FindDato = DateSerial(År, 1, Uge * 7 + Choose(DatePart("w", DateSerial(År, 1, 1), vbMonday, vbFirstFourDays), Dag - 7, Dag - 8, Dag - 9, Dag - 10, Dag - 11, Dag - 7, Dag - 6))
End Function
20. november 2003 - 14:46 #2
Du kander den således:

FindDato(2003, 46, 1)

Du skal altså bruge et nummer i stedet for at skrive f.eks. Mandag
Avatar billede krasmussen Praktikant
20. november 2003 - 15:05 #3
Jeg kalder den med feltværdierne sådan i min form

=Besogsdato(Besøgsår,BesøgsUge,Ugedag) altså ud fra feltnavnene, men får fejl #Navn?
20. november 2003 - 15:15 #4
hvilken værdi har Ugedag? Er det værdien Mandag eller værdien 1 (jvf mit forrige indlæg)?
Avatar billede krasmussen Praktikant
20. november 2003 - 15:33 #5
Felværdierne har Mandag som tekst
20. november 2003 - 15:39 #6
Så er du nødt til at lave din funktion lidt om:

Public Function Besogsdato(År As Integer, Uge As Byte, Ugedag As String) As Date
  Dim Dag as byte
  Select Case Ugedag
    Case "Mandag"
      Dag = 1
    Case "Tirsdag"
      Dag = 2
    Case "Onsdag"
      Dag = 3
    Case "Torsdag"
      Dag = 4
    Case "Fredag"
      Dag = 5
    Case "Lørdag"
      Dag = 6
    Case "Søndag"
      Dag = 7
End Select

  FindDato = DateSerial(År, 1, Uge * 7 + Choose(DatePart("w", DateSerial(År, 1, 1), vbMonday, vbFirstFourDays), Dag - 7, Dag - 8, Dag - 9, Dag - 10, Dag - 11, Dag - 7, Dag - 6))
End Function

Så skulle den gerne virke...
20. november 2003 - 15:40 #7
Sorry...glemte lige at rette et sted:

Public Function Besogsdato(År As Integer, Uge As Byte, Ugedag As String) As Date
  Dim Dag as byte
  Select Case Ugedag
    Case "Mandag"
      Dag = 1
    Case "Tirsdag"
      Dag = 2
    Case "Onsdag"
      Dag = 3
    Case "Torsdag"
      Dag = 4
    Case "Fredag"
      Dag = 5
    Case "Lørdag"
      Dag = 6
    Case "Søndag"
      Dag = 7
End Select

  Besogsdato = DateSerial(År, 1, Uge * 7 + Choose(DatePart("w", DateSerial(År, 1, 1), vbMonday, vbFirstFourDays), Dag - 7, Dag - 8, Dag - 9, Dag - 10, Dag - 11, Dag - 7, Dag - 6))
End Function
Avatar billede krasmussen Praktikant
20. november 2003 - 16:15 #8
Jeg får stadig fejl, sikkert fordi "Uge" er et tekstfelt, kan jeg nemt omgå det ?
20. november 2003 - 16:47 #9
Prøv denne:

Public Function Besogsdato(År As Integer, Uge As String, Ugedag As String) As Date
  Dim Dag as byte
  Select Case Ugedag
    Case "Mandag"
      Dag = 1
    Case "Tirsdag"
      Dag = 2
    Case "Onsdag"
      Dag = 3
    Case "Torsdag"
      Dag = 4
    Case "Fredag"
      Dag = 5
    Case "Lørdag"
      Dag = 6
    Case "Søndag"
      Dag = 7
End Select

  Besogsdato = DateSerial(År, 1, val(Uge) * 7 + Choose(DatePart("w", DateSerial(År, 1, 1), vbMonday, vbFirstFourDays), Dag - 7, Dag - 8, Dag - 9, Dag - 10, Dag - 11, Dag - 7, Dag - 6))
End Function
Avatar billede krasmussen Praktikant
20. november 2003 - 17:12 #10
Samme fejl - Måske jeg gør noget galt, jeg indsætter kaldet i kontrolelementkilde for feltet "besøgsdato" (datofelt) i formen som er baseret på en forespørgsel.
Avatar billede krasmussen Praktikant
20. november 2003 - 18:12 #11
Det er mig der s n o r k s o v e r, din kommentar 16:47 virker helt efter bogen!!!
Tak for hjælpen.
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