Avatar billede marvinq Nybegynder
01. december 2008 - 10:27 Der er 4 kommentarer og
1 løsning

Validering af klokkeslet

Hej,

Jeg sidder med en excelmakro som skal validere en indtastning og lave den om til et klokkeslet - uden at ændre formateringen på feltet...

Jeg har lavet følgende kode, og det virker fint, men mindre man rent faktisk skriver klokkeslættet med kolon (altså korrekt).

Det virker som om at ':' (kolon-tegnet) ikke registreres.


If ((Target.Column = 11) Or (Target.Column = 16)) Then
    If Not IsEmpty(Target) Or Target <> "" Then
        d = Target.Value
                                                   
        If Len(d) = 4 Then
            Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
           
        ElseIf Len(d) = 5 Then
            If ((Mid(d, 3, 1) = ".")) Then
                Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
            Else
                Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
            End If
        ElseIf Len(d) > 5 Then
                Target.Value = "'"
        Else
                Target.Value = "'" & Target.Value
        End If
    End If
End If


Håber I kan hjælpe
Avatar billede jkrons Professor
01. december 2008 - 12:31 #1
Problemet ligger i, at når du indtaster 12:34 opfattes det som et klokkeslæt og omregenes til decimaltallet  0,523611111111111
- og så er længden meget større end 5. Så din sidste betingelse træder i kraft.
Avatar billede marvinq Nybegynder
01. december 2008 - 12:41 #2
Det var præcis også min konklusion, men hvordan kommer jeg uden om det så ??

Der må findes en workaround.
Avatar billede jkrons Professor
01. december 2008 - 12:50 #3
Prøv at ret til

If ((Target.Column = 11) Or (Target.Column = 16)) Then
    If Not IsEmpty(Target) Or Target <> "" Then
        d = Target.Value
        If Target.Value < 1 Then
            Target.Value = "'" & CStr(Format(Target.Value, "hh:mm"))
            Exit Sub
        End If
                                                 
        If Len(d) = 4 Then
            Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
           
        ElseIf Len(d) = 5 Then
            If ((Mid(d, 3, 1) = ".")) Then
                Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
            Else
                Target.Value = "'" & Left(d, 2) & ":" & Right(d, 2)
            End If
        ElseIf Len(d) >= 5 Then
                Target.Value = "'"
        Else
                Target.Value = "'" & Target.Value
        End If
    End If
Avatar billede marvinq Nybegynder
01. december 2008 - 12:58 #4
Haha... selvfølgelig. Daah... Den vil jo altid være under 1.

Perfekt.

Smid et svar
Avatar billede jkrons Professor
01. december 2008 - 15:19 #5
Et svar :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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