Moin,
im Date-Format ist das so'n Problem mit negativen Zeiten.
Deshalb mal folgenden Code:
Private Function LeadingZero(lngZahl As Long) As String
Dim Result As String
If (Abs(lngZahl) > 10) Then
Result = Abs(lngZahl) ' Zahl ist zweistellig
Else
Result = "0" & Abs(lngZahl) ' Zahl ist einstellig
End If
If (lngZahl Result = "-" & Result ' Zahl ist negativ
End If
LeadingZero = Result
End Function
Private Function Arbeitszeit(ByVal datKommen As Date, ByVal datGehen As Date) As String
Dim lngKommen As Long ' Sekunden von Mitternacht bis zum Kommen
Dim lngGehen As Long ' Sekunden von Mitternacht bis zum Gehen
Dim lngSollZeit As Long ' Sekunden, die gearbeitet werden müssen
Dim lngPausen As Long ' Sekunden, die die Länge der Pausen entsprechen
Dim lngGearbeitet As Long ' Sekunden vom Kommen bis Gehen mit Pausen
Dim lngMitternach As Long ' Sekunden um 24Uhr
Dim strResult As String ' Gearbeitete Zeit
' Die Zeiten in Sekunden umrechnen
lngKommen = Second(datKommen) + Minute(datKommen) * 60 + Hour(datKommen) * 3600
lngGehen = Second(datGehen) + Minute(datGehen) * 60 + Hour(datGehen) * 3600
' Sollzeit beträt sieben Stunden, also 07:00,00
lngSollZeit = 7 * 3600 ' Achtung!! bei mehr als neun Stunden muß hier von Hand
' ausgerechnet werden! (Scheiß MicroSoft und VB)
' Pausenzeit beträgt 45 Minuten also 00:45,00
lngPausen = 45 * 60
' Mitternach berechnen
lngMitternach = 86400
' Die Brutto-Zeit berechnen
If (lngKommen > lngGehen) Then
' Über Mitternacht hinaus
lngGearbeitet = ((lngMitternach - lngKommen) + lngGehen)
Else
' Am selben Tag
lngGearbeitet = (lngGehen - lngKommen)
End If
' Pausen und SollZeit abziehen
lngGearbeitet = lngGearbeitet - (lngSollZeit + lngPausen)
' Zeit in einen String umwandeln
strResult = LeadingZero(lngGearbeitet \ 3600) & ":" & LeadingZero(Abs(lngGearbeitet Mod 3600) \ 60) & ":" & LeadingZero(Abs((lngGearbeitet Mod 3600) Mod 60))
' Zeit zurückgeben
Arbeitszeit = strResult
End Function
Hoffe, Dir damit geholfen zu haben.