Ich hänge mal ein Bild der Excel Tabelle und den Code an und versuche noch einmal zu beschreiben, wie der Ist und der Soll Stand wäre.
In der Tabelle wird beim ersten Auslesen vom RFID Chip nur die Startzeit in die Tabelle geschrieben.
Nach der Runde 1 wird der Chip wieder am Leser ausgelöst, die Rundenzahl steigt um 1, der km Stand aktualisiert sich auf die Runden KM Vorgabe (5,37km), in "Letzte Erfassung" wird die letzte Rundenzeit per Zeitstempel angegeben und die Laufzeit berechnet sich über den letzten Zeitstempel abzüglich der Startzeit.
Um eine doppelte Auslösung beim Auslesen vom Chip zu vermeiden, würde ich gerne pro Runde den Zeitstempel mit auslesen wollen. Würde man nun 2x auslesen,. so würde anhand einer Prüfung der letzten 2 Rundenzeiten (<5min) die letzte Runde wieder ausgetragen werden.
Und das sind meine 2 Probleme der Umsetzung. Ich hätte gerne, dass ein Zeitstempel für Runde 01 bis Runde 21 ausgelesen wird und das eine Prüfung durch die Zeitstempel erfolgt und dann Runde -1 und km -5,37 und letzte Rundeneintrag zurückgesetzt werden.
Eimmal der bisherige Code und ein Screen der Tabelle:
Private Sub Worksheet_Change(ByVal Target As Range)
' Überprüfe, ob die Zelle mit den RFID-Daten aktualisiert wurde
If Not Intersect(Target, Me.Range("A3")) Is Nothing Then
Dim rfid As String
rfid = Me.Range("A3").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 Not runnerRow Is Nothing Then
' Überprüfung, ob eine Startzeit vorliegt
If IsEmpty(runnerRow.Offset(0, 6).Value) Then
' Erfasse die Startzeit beim ersten Erfassen des Chips
runnerRow.Offset(0, 6).Value = Now
Else
' Erhöhe die Rundenzählung bei erneuter Erfassung des Chips
runnerRow.Offset(0, 4).Value = runnerRow.Offset(0, 4).Value + 1
' Aktualisiere die reinen Laufzeiten und Differenz
runnerRow.Offset(0, 28).Value = Now
runnerRow.Offset(0, 29).Value = runnerRow.Offset(0, 28).Value - runnerRow.Offset(0, 6).Value
' Aktualisiere ggf. die berechnete Zeit
runnerRow.Offset(0, 5).Value = Me.Range("G1") * runnerRow.Offset(0, 4)
End If
End If
End If
End Sub

|