Avatar billede -anders- Juniormester
06. april 2006 - 21:32 Der er 14 kommentarer og
1 løsning

Datoberegning (dato på første og sidste dag i den aktuelle uge)

Hej Eksperter, et lille tricky problem:

På min form har jeg to ubunde tekstbokse "tx1JobDato", "tx2Jobdato. Begge tekstbokse er formateret som dato/klokkeslet (kort datoformat)

Jeg har så 2 knapper "cmd1", "cmd2"

Når jeg klikker på cmd1 skal datoen på den første dag i den aktuelle uge skrives i tx1Jobdato, i tx2Jobdato skal datoen skrives for den sidste dag i den aktuelle uge.

Det samme skal ske når jeg klikker på cmd2, men her skal det være næste uge.

Et eks:
i dag er det torsdag den 6 april 2006, klikker jeg så på cmd1 skal datoen for i mandags skrives i tx1Jobdato, og datoen for på søndag skrives i tx2Jobdato

Klikker jeg på cmd2 skal datoen for næste mandag skrives i tx1Jobdato, og datoen for næste søndag skrives i tx2JobDato

Jeg er desværre helt blank, nogen forslag :o)

Hilsen Anders.
Avatar billede mugs Novice
06. april 2006 - 21:41 #1
Første dag:

Function FirstOfWeek(Optional dteDate As Date) As Date
If CLng(dit datofelt) = 0 Then
dit datofelt = Date
End If
FirstOfWeek = dit datofelt - Weekday(dteDate) + 1
End Function
Avatar billede mugs Novice
06. april 2006 - 21:43 #2
Function LastOfWeek(Optional dteDate As Date) As Date
If CLng(dit dato felt) = 0 Then
dit datofelt = Date
End If
LastOfWeek = dit datofelt - Weekday(dteDate) + 7
End Function

Begge funktioner forudsætter, at Søndag er første dag i ugen
Avatar billede -anders- Juniormester
06. april 2006 - 22:01 #3
Hej mugs, tak for indlæggende, men jeg har problemer med at få det til at virke, først melder den fejl på værdien Null, hvis jeg så ændre lidt på koden skriver den blot dags dato, og ikke datoen på den første dag i ugen. Jeg mener at den første dag i ugen beregnes fra mandag og ikke søndag
Avatar billede Slettet bruger
06. april 2006 - 22:40 #4
Du kan jo altid stave dig igennem!~)

Returnér ugedagen og så lav en simpel vb, a'la IF ReturFeltEllerStrengEllerAndet = onsdag THEN
FørsteDag = Dato-2 osv..

Jeg håber du forstår!~)
Avatar billede -anders- Juniormester
06. april 2006 - 22:46 #5
Okay, tak so far, det er sengetid, jeg kikker på det igen i morgen sov godt til alle

Hilsen Anders.
Avatar billede Slettet bruger
06. april 2006 - 23:00 #6
Jeg ved godt jeg ikke er den store programmør, men det her virker!~)

ps. dansk udgave af access, måske skal du lave den engelske eller hvordan og hvorledes ved jeg ikke... jeg har ikke mulighed for at teste på sprog lige nu!~)

If Format(Me.Dato, "ddd", vbMonday) = "ma" Then
Me.ForsteDag = Me.Dato
Me.SidsteDag = Me.Dato + 6
End If
If Format(Me.Dato, "ddd", vbMonday) = "ti" Then
Me.ForsteDag = Me.Dato - 1
Me.SidsteDag = Me.Dato + 5
End If
If Format(Me.Dato, "ddd", vbMonday) = "on" Then
Me.ForsteDag = Me.Dato - 2
Me.SidsteDag = Me.Dato + 4
End If
If Format(Me.Dato, "ddd", vbMonday) = "to" Then
Me.ForsteDag = Me.Dato - 3
Me.SidsteDag = Me.Dato + 3
End If
If Format(Me.Dato, "ddd", vbMonday) = "fr" Then
Me.ForsteDag = Me.Dato - 4
Me.SidsteDag = Me.Dato + 2
End If
If Format(Me.Dato, "ddd", vbMonday) = "lø" Then
Me.ForsteDag = Me.Dato - 5
Me.SidsteDag = Me.Dato + 1
End If
If Format(Me.Dato, "ddd", vbMonday) = "sø" Then
Me.ForsteDag = Me.Dato - 6
Me.SidsteDag = Me.Dato
End If
Avatar billede Slettet bruger
06. april 2006 - 23:17 #7
Private Sub cmd1_Click()
If Format(Date, "ddd", vbMonday) = "ma" Then
Me.tx1Jobdato = Date
Me.tx2Jobdato = Date + 6
End If
If Format(Date, "ddd", vbMonday) = "ti" Then
Me.tx1Jobdato = Date - 1
Me.tx2Jobdato = Date + 5
End If
If Format(Date, "ddd", vbMonday) = "on" Then
Me.tx1Jobdato = Date - 2
Me.tx2Jobdato = Date + 4
End If
If Format(Date, "ddd", vbMonday) = "to" Then
Me.tx1Jobdato = Date - 3
Me.tx2Jobdato = Date + 3
End If
If Format(Date, "ddd", vbMonday) = "fr" Then
Me.tx1Jobdato = Date - 4
Me.tx2Jobdato = Date + 2
End If
If Format(Date, "ddd", vbMonday) = "lø" Then
Me.tx1Jobdato = Date - 5
Me.tx2Jobdato = Date + 1
End If
If Format(Date, "ddd", vbMonday) = "sø" Then
Me.tx1Jobdato = Date - 6
Me.tx2Jobdato = Date
End If
End Sub

Private Sub cmd2_Click()
If Format(Date, "ddd", vbMonday) = "ma" Then
Me.tx1Jobdato = Date + 7
Me.tx2Jobdato = Date + 13
End If
If Format(Date, "ddd", vbMonday) = "ti" Then
Me.tx1Jobdato = Date + 6
Me.tx2Jobdato = Date + 12
End If
If Format(Date, "ddd", vbMonday) = "on" Then
Me.tx1Jobdato = Date + 5
Me.tx2Jobdato = Date + 11
End If
If Format(Date, "ddd", vbMonday) = "to" Then
Me.tx1Jobdato = Date + 4
Me.tx2Jobdato = Date + 10
End If
If Format(Date, "ddd", vbMonday) = "fr" Then
Me.tx1Jobdato = Date + 3
Me.tx2Jobdato = Date + 9
End If
If Format(Date, "ddd", vbMonday) = "lø" Then
Me.tx1Jobdato = Date + 2
Me.tx2Jobdato = Date + 8
End If
If Format(Date, "ddd", vbMonday) = "sø" Then
Me.tx1Jobdato = Date + 1
Me.tx2Jobdato = Date + 7
End If
End Sub
Avatar billede kabbak Professor
07. april 2006 - 01:16 #8
Private Sub cmd1_Click()
tx1JobDato = DateSerial(Year(Date), Month(Date), Day(Date) - (Weekday(Date) - 2))
tx2JobDato = tx1JobDato + 6
End Sub

Private Sub cmd2_Click()
tx1JobDato = DateSerial(Year(Date), Month(Date), (Day(Date) + 7) - (Weekday(Date) - 2))
tx2JobDato = tx1JobDato + 6
End Sub
Avatar billede kabbak Professor
07. april 2006 - 01:21 #9
det er vist sådan den skal være

Private Sub cmd1_Click()
tx1JobDato = Date - (Weekday(Date) - 2)
tx2JobDato = tx1JobDato + 6
End Sub

Private Sub cmd2_Click()
tx1JobDato = (Date + 7) - (Weekday(Date) - 2)
tx2JobDato = tx1JobDato + 6
End Sub
Avatar billede Slettet bruger
07. april 2006 - 09:01 #10
kabbak>lækkert!~)
Avatar billede -anders- Juniormester
07. april 2006 - 09:59 #11
kabbak: har testet dine indlæg, det virker perfekt, så point går til kabbak, tusind for hjælpen, og tak for de andre indlæg.
Avatar billede kabbak Professor
07. april 2006 - 15:24 #12
NB. der kan blive problemer, hvis der indtastes om søndagen, skal jeg lave koden om til at tage højde for det også ??.
Avatar billede -anders- Juniormester
08. april 2006 - 09:29 #13
Hej kabbak, ja tak gerne, du siger bare til hvis du skal have flere points :o)
Avatar billede kabbak Professor
08. april 2006 - 11:36 #14
I Ugens dage i VBA er i US Uger.

Så deres første dag er søndag, hvor vores er mandag.

Det betyder at om søndagen retunerer Weekday(Date)  1, og det dur jo ikke at trække 2 fra den, det giver jo -1, derfor ændring i koden.

Private Sub cmd1_Click()
    Dim X As Integer
    If Weekday(Date) = 1 Then
        X = 6
    Else
        X = Weekday(Date) - 2
    End If
   
    tx1JobDato = Date - X
    tx2JobDato = tx1JobDato + 6
End Sub

Private Sub cmd2_Click()
    Dim X As Integer
    If Weekday(Date) = 1 Then
        X = 6
    Else
        X = Weekday(Date) - 2
    End If
   
    tx1JobDato = (Date + 7) - X
    tx2JobDato = tx1JobDato + 6
End Sub
Avatar billede -anders- Juniormester
08. april 2006 - 12:01 #15
08/04-2006 11:36:15 testet, det virker perfekt :o), tusind tak for hjælpen

Hilsen Anders.
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