06. december 2011 - 09:36 Der 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 ?
Avatar billede Slettet bruger
06. december 2011 - 18:14 #1
Access har ingen tidsinterval type, men en tidspunkt type - under 24 timer fra 0 punktet vises det uden datodel. Du er nød til at anvende et udtryk.

Hvis kommatal er en ok repræsentation (alså 1 time og 30 minutter vises som 1,5time)

  feltværdi*24

hvis der ønskes timer og minutter:

int(feltværdi*24) & ":" & 60*(24*feltværdi-int(24*feltværdi))
07. december 2011 - 14:42 #2
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?
Avatar billede fdata Forsker
07. december 2011 - 21:41 #3
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
09. december 2011 - 18:35 #4
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.
Avatar billede fdata Forsker
11. december 2011 - 14:07 #5
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
13. december 2011 - 21:10 #6
TAKKER mange gange, fdata, det virkede :-)
Avatar billede fdata Forsker
13. december 2011 - 22:01 #7
Super. Takker for point ;O)
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