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:

Private Const WaitMS   As Long = 1000
 
Private BusyTime       As Variant
Private AccumulateTime As Long
 
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, 0) + 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