06. december 2011 - 09:36Der er
6 kommentarer og 1 løsning
Vise timer:minutter over 24 timer ?
Hej, Jeg har et excel-ark hvor en kolonne indeholder tid, fx 49:10, altså 2 dage, 1, time og 10 min. Formatet er [t]:mm. Når jeg importerer disse tider til Access, viser den ikke 49:10, men 1:10 (02-01-1900 01:00:00). Hvordan får jeg den til at angive det i et 'over 24 timer' format svarende til [t]:mm i Excel ?
Når jeg i en forespørgsel kører ovennævnte udtryk (det med timer og minutter) (indsætter feltnavnet istedet for 'feltværdi') returneres værdien 73:9,99999999767169 (for eksemplet 49:10). Det er jo helt forkert. Det er altså tallet/datoen 02-01-1900 01:10:00 den regner ud til knapt 74 timer. Hvordan/hvorfor gør den det? Any ideas?
Access' klokkeslæt (så længe vi er indenfor de almindelige 24 timer) foregår på datoen 30-12-1899. Når vi runder 24 timer, skifter datoen til 01-01-1900 og så videre.
Din værdi er 02-01-1900 01:10, altså har vi rundet to datoskift (=48 timer). Ialt har vi altså 49 timer plus minutterne.
Her er lidt kode, du kan lege med: (se resultatet i Immediate vinduet, Ctrl-G)
Sub Test_Afkod_TimerOgMinutter() Afkod_TimerOgMinutter (#1:10:00 AM#) Afkod_TimerOgMinutter (#1/1/1900 1:10:00 AM#) 'Bemærk m/d/yyyy Afkod_TimerOgMinutter (#1/2/1900 1:10:00 AM#) 'Bemærk m/d/yyyy End Sub
Sub Afkod_TimerOgMinutter(d As Date) Dim t As Integer Dim m As Integer Dim s As String
If Year(d) = 1899 Then t = Hour(d) m = Minute(d) Else t = Hour(d) + Day(d) * 24 m = Minute(d) End If
s = Format(t, "00") & ":" & Format(m, "00") Debug.Print d; Tab(30); s End Sub
fdata: Jeg har meget lidt erfaring med subs/VBA/makro'er i Access, så jeg ved dårligt hvor jeg skal sætte din kode ind. Kunne du ikke have lyst til at uploade en access-fil til mig (på gratisupload.dk fx)så jeg kan se hvordan det skal gøres?
Men hvis det kan lade sig gøre med et udtryk i en forespørgsel ville det nok være lettere for mig.
OK. Vi gør det på en lidt anden måde. Det dér med løsninger udenom eksperten er ikke lige mig. Der kunne være andre, der "lyttede" med og ville se løsningen.
Du skal oprette et modul, hvor du skal placere koden. Fremgangsmåden er:
1. Tast Alt-F11, så kommer du ind i VBA editoren 2. Vælg Insert/Module 3. Copy/Paste funktionen, der er vist nedenfor, ind i modulet 4. Gem modulet (navnet er helt op til dig) 5. Luk VBA editoren 6. Opret din forespørgsel 7. I forespørgselsgitteret opretter du et nyt felt med følgende indhold: X:Afkod_TimerOgMinutter(<Dit datofelt>) I stedet for X kan du frit vælge et andet navn I stedet for <Dit datofelt> indsætter du navnet på dit datofelt
Koden, du skal bruge, er:
Function Afkod_TimerOgMinutter(d As Date) As String Dim t As Integer Dim m As Integer Dim s As String
If Year(d) = 1899 Then t = Hour(d) m = Minute(d) Else t = Hour(d) + Day(d) * 24 m = Minute(d) End If
Afkod_TimerOgMinutter = Format(t, "00") & ":" & Format(m, "00") End Function
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.