ein Update noch, etwas aufgeräumt. Und Now durch Time ersetzt. Damit fällt die Datumsangabe im Zeitstempel weg. Da die Läufe wahrscheinlich nicht über Mitternacht andauern, sollte das kein Problem sein.
Private Sub Worksheet_Change(ByVal Target As Range)
' Überprüfe, ob die Zelle mit den RFID-Daten aktualisiert wurde
Dim akttime As Date
akttime = Time
If Target.Address <> "$A$3" Then Exit Sub
Dim rfid As String
rfid = Target.Value
' Finde den Läufer in der Tabelle anhand der ID
Dim runnerRow As Range
Set runnerRow = Me.Columns("C").Find(What:=rfid, LookIn:=xlValues, LookAt:=xlWhole)
If runnerRow Is Nothing Then Exit Sub
' Überprüfung, ob eine Startzeit vorliegt
If IsEmpty(runnerRow.Offset(0, 6).Value) Then
' Erfasse die Startzeit beim ersten Erfassen des Chips
Application.EnableEvents = False
runnerRow.Offset(0, 6).Value = akttime
Application.EnableEvents = True
Else
' Erhöhe die Rundenzählung bei erneuter Erfassung des Chips
If runnerRow.Offset(0, 4).Value < 21 Then
Dim lasttime As Date
lasttime = WorksheetFunction.Max(runnerRow.Offset(0, 7).Resize(1, 21))
If DifferenzMehrAls5(lasttime, akttime) Then
Application.EnableEvents = False
runnerRow.Offset(0, 4).Value = runnerRow.Offset(0, 4).Value + 1
runnerRow.Offset(0, 5).Value = Me.Range("G1") * runnerRow.Offset(0, 4)
runnerRow.Offset(0, 6 + runnerRow.Offset(0, 4)).Value = akttime
' Aktualisiere die reinen Laufzeiten und Differenz
runnerRow.Offset(0, 28).Value = akttime
runnerRow.Offset(0, 29).Value = runnerRow.Offset(0, 28).Value - runnerRow.Offset(0, 6).Value
Application.EnableEvents = True
Else
'hier Bereich für Aktion wenn Rundenzeit unter 5 Minuten
End If
Else
'Aktion falls letzte Runde angefangen
End If
End If
End Sub
Function DifferenzMehrAls5(zeita, zeitb) As Boolean
Dim zeit1 As Date
Dim zeit2 As Date
Dim differenz As Double
' Beispielzeiten setzen
zeit1 = CDate(zeita)
zeit2 = CDate(zeitb)
' Differenz berechnen (in Tagen, deshalb *24*60 für Minuten)
differenz = Abs(zeit2 - zeit1) * 24 * 60
DifferenzMehrAls5 = differenz > 5
End Function
|