VBA Tipp: Dauer der Inaktivität feststellen

Aus DBWiki
Wechseln zu: Navigation, Suche

Problem

Ich möchte ermitteln, wie lange der Benutzer ein Formular geöffnet hat, und aber keine Aktivitäten vorgenommen hat.

Lösung

Das geht mit folgenden Ereignisprozeduren im Formular:

Dim LastActivity As Date
Const Waitms = 1000
 
Private Sub Detailbereich_MouseMove(Button As Integer, Shift As Integer, _
 x As Single, y As Single)
  LastActivity = Now
End Sub
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
  LastActivity = Now
End Sub
 
Private Sub Form_Current()
  LastActivity = Now
End Sub
 
Private Sub Form_KeyPress(KeyAscii As Integer)
  LastActivity = Now
End Sub
 
Private Sub Form_Load()
  Me.TimerInterval = Waitms
  Me.KeyPreview = True
  LastActivity = Now
End Sub
 
Private Sub Form_Timer()
  Me!InaktivSeitSekunden = DateDiff("s",LastActivity,Now)
End Sub

Gegebenenfalls müssen noch weitere Mausereignisse eingefügt werden, da es keine formularweiten Mausereignisse (analog zu der "Tastenvorschau") gibt.

Das Formularfeld "InaktivSeitSekunden" stellt die Zeit in Sekunden auf dem Formular dar. Alternativ könnte man z.B. das Formular auch nach einer gewissen Zeit der Inaktivität schließen:

Private Sub Form_Timer()
  If DateDiff("s",LastActivity,Now) > 360 Then ' 6 Minuten nichts los
    DoCmd.Close acForm, Me.Name
  End If
End Sub

Siehe auch