VBA Tipp: Verweilzeit im Formular ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

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.

Siehe auch