Help detecting Idle Time

olorin

Registered User.
Local time
Today, 18:43
Joined
Jun 9, 2006
Messages
81
Hi people,
I got this code from an MS help website, (can't remember where).
It detects the User's idle time and closes Access if there is no screen activity for four minutes.
It works great if the user doesn't open a report.
It looks for the last ActiveForm and compares to the current.
But when I open a report I get an error. If I close the error dialog then the program still runs fine but the timer is not on.
Any suggestions?

code:
Option Compare Database
Option Explicit

Private Sub Form_Timer()
' IDLEMINUTES determines how much idle time to wait for before
' running the IdleTimeDetected subroutine.
Const IDLEMINUTES = 4

Static PrevControlName As String
Static PrevFormName As String
Static ExpiredTime

Dim ActiveFormName As String
Dim ActiveControlName As String
Dim ExpiredMinutes

On Error Resume Next

' Get the active form and control name.
ActiveFormName = Screen.ActiveForm.Name
If Err Then
ActiveFormName = "No Active Form"
Err = 0
End If

ActiveControlName = Screen.ActiveControl.Name
If Err Then
ActiveControlName = "No Active Control"
Err = 0
End If

' Record the current active names and reset ExpiredTime if:
' 1. They have not been recorded yet (code is running
' for the first time).
' 2. The previous names are different than the current ones
' (the user has done something different during the timer
' interval).
If (PrevControlName = "") Or (PrevFormName = "") _
Or (ActiveFormName <> PrevFormName) _
Or (ActiveControlName <> PrevControlName) Then
PrevControlName = ActiveControlName
PrevFormName = ActiveFormName
ExpiredTime = 0
Else
' ...otherwise the user was idle during the time interval, so
' increment the total expired time.
ExpiredTime = ExpiredTime + Me.TimerInterval
End If

' Does the total expired time exceed the IDLEMINUTES?
ExpiredMinutes = (ExpiredTime / 1000) / 60
If ExpiredMinutes >= IDLEMINUTES Then
' ...if so, then reset the expired time to zero...
ExpiredTime = 0
' ...and call the IdleTimeDetected subroutine.
IdleTimeDetected ExpiredMinutes
End If
End Sub
 
Hi,
I get a Runtime Error 2475 stating
"You entered an expression that requires a form to be the active window"

Thanx for your interest, hope you can help.
 
What version of Access are you using? There is code in the procedure that expects that a form will not be the active screen component and handles the error. Does the Debugger highlight a particular line of code? Have you set your system to other than "Break on unhandled errors"?
 
Thanx again for your time,
I'm using Access 2007 with winXP service pack 3, and I have downloaded the updates for Access, (which allows scrolling through code :) )yippee!).
The line where it breaks is
ActiveFormName = Screen.ActiveForm.Name

The database was not set to break on unhandled errors. Which I have now done, and hey presto! no more error warnings. AND..... the timer event now kicks in and executes the procedure.

Thank you so much for your advice. I didn't know about the break on unhandled errors, as ALL the subroutines have an error handler in them, (something I learned in this forum).
In fact, if it wasn't for this forum I would have not been able to build the database in the first place. All Controls and Labels have names according to the naming conventions I also learnt on here.
Thank you again.
Your time is appreciated.
 

Users who are viewing this thread

Back
Top Bottom