VBA Tipp: Verweilzeit im Formular ermitteln
Aus DBWiki
Problem
Ich möchte ermitteln, wie lange der Benutzer für die Bearbeitung eines bestimmten Datensatzes benötigt und die Zeit dann auch gleich in diesem Datensatz speichern. Dabei sollen Zeiten der Untätigkeit (also ohne Tastatureingaben oder Mausbewegungen) nach einer gewissen Latenzzeit nicht mitgezählt werden.
Lösung:
Das geht mit folgenden Ereignisprozeduren im Formular:
Dim BusyTime, AccumulateTime As Long Const Waitms = 1000 Private Sub Detailbereich_MouseMove(Button As Integer, Shift As Integer, _ x As Single, y As Single) If IsNull(BusyTime) Then BusyTime = Now Me.TimerInterval = Waitms End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) Form_Timer Me!Verweilzeit = Nz(Me!Verweilzeit) + AccumulateTime End Sub Private Sub Form_Current() Me!Verweilzeit.SetFocus Me.Dirty = True BusyTime = Null End Sub Private Sub Form_KeyPress(KeyAscii As Integer) If IsNull(BusyTime) Then BusyTime = Now Me.TimerInterval = Waitms End Sub Private Sub Form_Load() Me.TimerInterval = Waitms Me.KeyPreview = True BusyTime = Null End Sub Private Sub Form_Timer() If Not IsNull(BusyTime) Then AccumulateTime = AccumulateTime + DateDiff("s", BusyTime, Now) BusyTime = Null End If End Sub
Gegebenenfalls müssen noch weitere Mausereignisse eingefügt werden, da es keine formularweiten Mausereignisse (analog zu der "Tastenvorschau") gibt.
Das gebundene Feld "Verweilzeit" nimmt die ermittelte Verweilzeit auf.