07. september 2005 - 21:37Der er
14 kommentarer og 1 løsning
Fra 1800 til 18:00 - automatisk
Hej Alle,
Jeg har fundet flere workbooks til registrering af timer, men de kræver alle at start/slut tid indtastes som f.eks 08:00 til 16:00. Jeg taster altid mine timer som 4 cifre og der er derfor ingen grund til at jeg skal have fat i ':' flere gange om dagen. Er der en måde hvor man kan få enten behandlet 0800 som 08:00 eller få arket til at automatisk at indsætte ':'.
(jeg kan da ikke være den første som synes ':' er træls..)
Metoden er OK, når der bare skal indtastes tal, men ikke hvis disse senere skal bruges i klokkeslætsberegninger, da 1200 - selv om det vises som 12:00 - af Excel opfattes som et tal, ikke som et klokkeslæt.
Du kan jo også prøve at lave en løsning, hvor Excel laver det om til tid, så snart du har indtastet det. Det kan f.eks. gøres ved at lægge følgende lille program ind i regnearkets programkode:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then If Len(Target) = 3 Or Len(Target) = 4 Then Target = Left(Format(Target, "0000"), 2) / 24 + Right(Format(Target, "0000"), 2) / 24 / 60 End If End If
End Sub
Hvis du bruger et andet område end A1..A10 til tidspunkterne skal du lige huske at ændre det.
>>jkrons Det er netop lige det som er problemet >>sjap Jeg tror sgu du har ramt plet (hvis det ikke kan gøres via formatering) Jeg tester lige i aften og vender så tilbage.
sjap-> Jeg lavede noget lignende i går, og den virkede fint, bortset fra hvis der indtastes 0600, 1200 eller 1800. Så skrives der 00:00. Din har samme problem kan jeg se.
Og så lider såvel din kode som min af den skavank, at de ikke tager høje for fejlinsdtastninger. Skal du fx taste 1159 men rammer 1169, skrives det som 12:09 - hvilket er validt nok, men næppe det, der ønskes, og da det jo sker automatisk, er spørgsmålet om man så opdager fejlene.
jkrons > Tjah jeg sad faktisk og rodede med lige præcis det i går (6-12-18). Hvordan jeg så lige fik kopieret en anden løsning herind, kan jeg ikke forklare - men det er selvføgelig noget sjusk, ogf det beklager jeg.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing Then If Len(Format(Target, "###0")) = 3 Or Len(Format(Target, "###0")) = 4 Then Target = Left(Format(Target, "0000"), 2) / 24 + Right(Format(Target, "0000"), 2) / 24 / 60 End If End If
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing Then If Len(Format(Target, "###0")) = 3 Or Len(Format(Target, "###0")) = 4 Then iTime = Left(Format(Target, "0000"), 2) iMinut = Right(Format(Target, "0000"), 2) If iTime <= 24 And iMinut <= 59 Then Target = iTime / 24 + iMinut / 24 / 60 End If End If End If
Kunne lige pludselig se en lettere måde at gøre det på - uden at den går i selvsving, og så kom der lige en fejlmelding på også (så skulle der vist ikke så store chancer for fejlindlæsninger, der ikke bliver opdaget):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing And Target <> "FEJL!" Then If Target >= 1 And Len(Format(Target, "0")) <= 4 Then iTime = Left(Format(Target, "0000"), 2) iMinut = Right(Format(Target, "0000"), 2) If iTime <= 24 And iMinut <= 59 Then Target = iTime / 24 + iMinut / 24 / 60 Else Target = "FEJL!" End If Else Target = "FEJL!" End If End If
Jeg har prøvet at få din kode til at virke. Når jeg taster f.eks 0800 får jeg 'FEJL!'
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing And Target <> "FEJL!" Then If Target >= 1 And Len(Format(Target, "0")) <= 4 Then iTime = Left(Format(Target, "0000"), 2) iMinut = Right(Format(Target, "0000"), 2) If iTime <= 24 And iMinut <= 59 Then Target = iTime / 24 + iMinut / 24 / 60 Else Target = "FEJL!" End If Else Target = "FEJL!" End If End If
End Sub
Kan det skyldes at mit dato format i windows er: 2005-09-16 08:55 ?
Denne synes at virke:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing Then If Len(Format(Target, "###0")) = 3 Or Len(Format(Target, "###0")) = 4 Then Target = Left(Format(Target, "0000"), 2) / 24 + Right(Format(Target, "0000"), 2) / 24 / 60 End If End If
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C5:C10")) Is Nothing And Target <> "FEJL!" Then If Target >= 1 And Len(Format(Target, "0")) <= 4 Then iTime = Left(Format(Target, "0000"), 2) iMinut = Right(Format(Target, "0000"), 2) If iTime <= 24 And iMinut <= 59 Then Target = iTime / 24 + iMinut / 24 / 60 Else Target = "FEJL!" End If Else If Not Target < 1 Then Target = "FEJL!" End If End If
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.