Avatar billede brilleabe Nybegynder
07. september 2005 - 21:37 Der 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..)

Håber i kan hjælpe.

/Brille
Avatar billede somalpe Nybegynder
07. september 2005 - 21:52 #1
Vælg formater celler og brugerdefineret.
skriv 00":"00 i type og det burde virke.
Avatar billede somalpe Nybegynder
07. september 2005 - 21:53 #2
Den tager ikke højde for at du indtaster "ulovlige" værdier.....
Avatar billede brilleabe Nybegynder
07. september 2005 - 21:55 #3
hej,

jeg får godt nok ':' i mit tal, men hvis jeg f.eks taster 1200 (eller alt muligt andet) står der bare 00:00 i cellen bag efter.
Avatar billede somalpe Nybegynder
07. september 2005 - 22:01 #4
Underligt. Det virker fint ved mig. Jeg ved ikke hvad der går galt ved dig og har desværre ingen bud på en løsning......
Desværre :o(
Avatar billede jkrons Professor
07. september 2005 - 22:48 #5
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.
Avatar billede sjap Praktikant
08. september 2005 - 00:28 #6
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.
Avatar billede brilleabe Nybegynder
08. september 2005 - 16:58 #7
>>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.
Avatar billede jkrons Professor
08. september 2005 - 17:48 #8
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.
Avatar billede sjap Praktikant
08. september 2005 - 18:02 #9
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

End Sub
Avatar billede jkrons Professor
08. september 2005 - 18:04 #10
sjap-> Den fandt jeg så ikke :-) Så er der bare problemet med fejlindtastningerne tilbage :-)
Avatar billede sjap Praktikant
08. september 2005 - 18:11 #11
Det sidste kan så måske klares med denne her:

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

End Sub
Avatar billede sjap Praktikant
08. september 2005 - 18:32 #12
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

End Sub
Avatar billede brilleabe Nybegynder
16. september 2005 - 09:00 #13
Hej sjap,

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

End Sub

...men her mangler den fine fejlhåndtering jo!
Avatar billede sjap Praktikant
16. september 2005 - 18:43 #14
Ja, den kan let komme til at drille. Prøv med

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

End Sub
Avatar billede brilleabe Nybegynder
16. oktober 2005 - 20:42 #15
Den er i skabet! 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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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