• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

hulp met testen en verbeteren van een tijdinvoer funciie

Status
Niet open voor verdere reacties.

sylvester-ponte

Verenigingslid
Lid geworden
19 apr 2007
Berichten
6.620
hallo

ik ben bezig met een functie die ingevoerde tijd omzet in echte tijds notatie
(alleen uren en minuten)

dus als ik "700" invoer moet er "07:00" terug gegeven worden

en als er onzin staat ( bv: 77777) dan komt er "00:00" terug

ik ben al een heel eind
zijn er mensen die het ook willen testen en de fouten door geven of de funtie verbeteren?
dit heb ik gemaakt:
Code:
Function InvoerTijd(T As String) As String
'bekijk de lengte
    'is de lente 5 dan maak van het derde caracter een ":"
    'probeer dan of het een tijd opleverd anders geef "00:00"terug
    T = Replace(T, ".", ":")
    T = Replace(T, ",", ":")
    T = Replace(T, " ", ":")
    
    If Len(T) = 5 Then
        Mid(T, 3, 1) = ":"
        If IsDate(T) Then
            InvoerTijd = T
        Else
            InvoerTijd = "00:00"
        End If
        Exit Function
    End If
    
    If Len(T) = 4 Then
        If IsNumeric(T) Then
            T = Left(T, 2) & ":" & Right(T, 2)
        ElseIf Not IsNumeric(Mid(T, 3, 1)) Then
            T = T & "0"
        Else
            T = "0" & T
        End If
        InvoerTijd = InvoerTijd(T)
        Exit Function
    End If
    
    If Len(T) = 3 Then
        If IsNumeric(T) Then
            T = "0" & T
        Else
            If Not IsNumeric(Mid(T, 1, 1)) Then
                T = "0" & T
            ElseIf Not IsNumeric(Mid(T, 2, 1)) Then
                T = "0" & T & "0"
            ElseIf Not IsNumeric(Mid(T, 3, 1)) Then
                T = T & "00"
            End If
        End If
        InvoerTijd = InvoerTijd(T)
        Exit Function
    End If
    
    If Len(T) = 2 Then
        If IsNumeric(T) Then
            If CInt(T) < 24 Then
                T = T & ":00"
            ElseIf CInt(T) < 60 Then
                T = "00:" & T
            Else
                T = "0" & T & "0"
            End If
        Else
            If Not IsNumeric(Mid(T, 1, 1)) Then
                T = "00" & T & "0"
            ElseIf Not IsNumeric(Mid(T, 2, 1)) Then
                T = "0" & T & "00"
            End If
        End If
        InvoerTijd = InvoerTijd(T)
        Exit Function
    End If
    
    If Len(T) = 1 Then
        If IsNumeric(T) Then
            T = "0" & T & ":00"
        Else
            T = "00:00"
        End If
        InvoerTijd = T
        Exit Function
    End If
    InvoerTijd = "00:00"
End Function

groet sylvester
 

Bijlagen

een klein beetje anders
Code:
Function InvoerTijd(T As String) As String
  Dim Tijd As Variant, i As Integer

  T = Replace(Trim(T), ".", ":")                           'verwijder spaties en vervang alle mogelijke separators door ":"
  T = Replace(T, ",", ":")
  T = Replace(T, " ", ":")

  InvoerTijd = "00:00"                                     'voor alle gevallen als het straks mis gaat
  On Error Resume Next
  i = InStr(1, T, ":")
  If i <> 0 Then                                           'staat er een ":" in ?
    If Len(T) - i < 2 Then T = T & WorksheetFunction.Rept("0", Len(T) - i)  'voldoende "0" achterin toevoegen
    If i = 1 Then T = "0" & T                              'minstens 1 cijfer voor de ":"
    Tijd = TimeValue(T)                                    'maak een tijd van je tekst
    If IsDate(Tijd) Then                                   'is het een datum geworden
      InvoerTijd = Format(Tijd, "hh:mm")
      Exit Function
    End If
  Else
    If Not IsNumeric(T) Then Exit Function                 'wat hier staat is geen getal, dus stoppen
    Select Case Len(T)
      Case 3, 4
        Tijd = TimeValue(Left(T, Len(T) - 2) & ":" & Right(T, 2))
        If IsDate(Tijd) Then
          InvoerTijd = Format(Tijd, "hh:mm")
          Exit Function
        End If
      Case 1, 2
        If CInt(T) < 24 Then
          InvoerTijd = Format(T & ":00", "hh:mm")
          Exit Function
        ElseIf CInt(T) < 60 Then
          InvoerTijd = Format("00:" & T, "hh:mm")
        End If
    End Select
  End If
End Function
 
hoi Cow18
gaaf dat je mee denkt:)
er zitten verschillen in de uitkomsten:
12;50 moet 12:50 worden. ieder niet numeriek tegen kan als scheidingsteken werken
ook de spatie aan het begin .
het gaat uiteindelijk door "digibeten" gebruikt worden.
" 12" moet 00:12 worden
75 moet 07:50 worden

hier het verschil tussen de formules:Bekijk bijlage van Invoer naar Tijd(2).xls

groet sylvester
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan