Dein Code stammt von einer Ki. Nur die kommentiert den Code so. Ich denke das es besser ist nur die reinen Zeiten vom vba Eintragen zu lassen und die andern Werte per Formel zu ermitteln.
Application.EnableEvents = False/True ist wichtig wenn man in Change Event-Makros Werte in Zellen schreibt. Sonst dreht dein Code bei Jeder Zelländerung eine Extrarunde.
runnerRow.Offset(0, 6 + runnerRow.Offset(0, 4)).Value = Now hier wird die Rundenzeit abhängig von der Rundenanzahl in eine neue Zelle geschrieben.
DifferenzMehrAls5 ist eine Funktion, die wahr oder falsch zurückgibt und als Schalter für deine 5 Minutengrenze dient.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' Überprüfe, ob die Zelle mit den RFID-Daten aktualisiert wurde
If Target.Address = "$A$3" Then
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 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
Application.EnableEvents = False
runnerRow.Offset(0, 6).Value = Now
Application.EnableEvents = True
Else
' Erhöhe die Rundenzählung bei erneuter Erfassung des Chips
Dim lasttime As Date
lasttime = WorksheetFunction.Max(runnerRow.Offset(0, 7).Resize(21))
If DifferenzMehrAls5(lasttime, Now) 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 = Now
' 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
Application.EnableEvents = True
End If
End If
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
|