VBA Tipp: Wettkampfzeiten

Aus DBWiki
Wechseln zu: Navigation, Suche

Problem

Ich möchte Wettkampfzeiten auf Hundertstelsekunden genau erfassen und in der Datenbank verwalten.

Lösung

Dafür eignet sich das eingebaute Datum-/Zeitformat nicht, da es nur sekundengenau ist.

Wenn man intern in Hundertstelsekunden rechnet und die Zeiten in einer Long-Integer-Variablen ablegt, geht der Wertebereich bis zu 248 Tage, was für die meisten sportlichen Wettkämpfe wohl ausreichen dürfte ;-)

Die Formatierung muss man dann selber machen, für die Ausgabe ist das einfach:

Public Function strHundertstelSekunden(S)
 If IsNull(S) Then
  strHundertstelSekunden = Null
 Else
  Dim Res As String, V As Long
  V = CLng(S)
  Res = "," & Format(V Mod 100, "00")
  V = V \ 100
  Res = ":" & Format(V Mod 60, "00") & Res
  V = V \ 60
  Res = ":" & Format(V Mod 60, "00") & Res
  V = V \ 60
  strHundertstelSekunden = Format(V, "00") & Res
 End If
End Function

In der umgekehrten Richtung wird es schwieriger:

Public Function HundertstelSekundenStr(S)
 If IsNull(S) Then
  HundertstelSekundenStr = Null
 Else
  Dim Res As String, V As Long, I As Long, J As Long, _
  K As Long, Ch As String
  Res = "": J = 0: K = 0: S = "00000000" & S
  For I = Len(S) To 1 Step -1
    Ch = Mid(S, I, 1)
    If Ch >= "0" And Ch <= "9" Then
      Res = Ch & Res
      J = J + 1
      If J > 1 Then
        ' Nächste Doppelziffer erreicht
        J = 0: K = K + 1
      End If
    Else
      ' Trennzeichen
      If J = 1 Then
      ' Stellen auffüllen
        If Ch = "," Then
          Res = Res & "0"
        Else
          Res = "0" & Res
        End If
        J = 0: K = K + 1
      End If
    End If
    If K = 4 Then
      Exit For
    End If
  Next
  ' da freut sich Mr. Horner:
  HundertstelSekundenStr = ((CLng(Mid(Res, 1, 2)) * 60 + _
   CLng(Mid(Res, 3, 2))) * 60 + _
   CLng(Mid(Res, 5, 2))) * 100 + _
   CLng(Mid(Res, 7, 2))
 End If
End Function


Wiki hinweis.png Tipp: Zusätzlich kann man in Eingabefeldern noch mit dem KeyPress-Ereignis herumexperimentieren bzw. versuchen, ein geeignetes Eingabeformat zu definieren.