Hallo Wissende,
wenn ich nachstehende Funktion zweimal aufrufe habe ich zwei Zeitsempel als Strings im Format Min:Sek,Millisek
Wie/womit bilde ich da die Differenz im gleichen Format?
Sicher, durch Stringzerlegung wirds evtl. gehen.
Bin da nur grad verunsichert weil
FormatSystemTime = .wHour + 60 * .wMinute + 3600 * .wSecond + 3600000 * .wMilliseconds
einen Überlauf erzeugt (As String habe ich dabei auskommentiert)
Bietet API da was Schnelles? Bei vbarchiv.net fand ich bislang nichts dazu. Die hier benutzte API habe ich da her.
Danke ^ Gruß
Reinhard
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Function FormatSystemTime() As String
Dim st As SYSTEMTIME
GetSystemTime st
'MsgBox st.wMinute
With st
'MsgBox .wMilliseconds
'FormatSystemTime = .wHour + 60 \* .wMinute + 3600 \* .wSecond + 3600000 \* .wMilliseconds
FormatSystemTime = Format(.wMinute, "00") & ":" & \_
Format(.wSecond, "00") & "," & Format(.wMilliseconds, "000")
End With
'FormatSystemTime = CDate(FormatSystemTime)
End Function
Grüezi Reinhard
wenn ich nachstehende Funktion zweimal aufrufe habe ich zwei
Zeitsempel als Strings im Format Min:Sek,Millisek
Wie/womit bilde ich da die Differenz im gleichen Format?
Strings zu verrechnen ist nicht gerade das Gelbe vom Ei…
Warum nicht den Rückgabewert als Double geben lassen, dann birgt die weitere Verrechnung keine Fallstricke mehr.
Die Ausgabe als String ist mit Format nur ohne die Millisekunden gemacht werden, aber im Tabellenblatt geht das ebenfalls ohne weiteres:
Option Explicit
Option Explicit
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SystemTime)
Private Type SystemTime
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Function mySystemTime() As Double
Dim st As SystemTime
GetSystemTime st
With st
mySystemTime = (.wHour / 24) + \_
(.wMinute / 1440) + \_
(.wSecond / 86400) + \_
(.wMilliseconds / 86400 / 1000)
End With
End Function
Sub tr\_start()
With Range("A1")
.Value = mySystemTime()
.NumberFormat = "hh:mm:ss.000"
End With
End Sub
Mit freundlichen Grüssen
Thomas Ramel
Warum nicht den Rückgabewert als Double geben lassen, dann
birgt die weitere Verrechnung keine Fallstricke mehr.
Grüezi Thomas,
in die Richtung dachte ich ja, da kam „Überlauf“.
Das kam weil ich als GAU oder DAU *gg* grad falschrum gerechnet hatte 
Danke für den Schubs 
Jetzt klappt das natürlich mit der Differenzbildung durch Excel selbst.
Gruß
Reinhard