The information here was derived from Microsoft Knowledge Base Article Q128814 .
The procedures here will allow you to set the database to shut down if the user doesn't commit any activity for a specific amount of time. Here are the steps:
Sub Form_Timer() ' IDLEMINUTES determines how much idle time to wait for before ' running the IdleTimeDetected subroutine. Const IDLEMINUTES = 5 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 |
Sub IdleTimeDetected (ExpiredMinutes) Dim Msg As String Msg = "No user activity detected in the last " Msg = Msg & ExpiredMinutes & " minute(s)!" MsgBox Msg, 48 End Sub |
Insert the following code in the DetectIdleTime form right above the "on timer" code and right below the Option Compare Database Option Explicit code:
Sub IdleTimeDetected(ExpiredMinutes) Application.Quit acSaveYes End Sub |
In the 1st BLUE SECTION with code, the line Const IDLEMINUTES = 5 tells the database to shut down after 5 minutes if it's inactive. If you wish to modify the length, simply modify the number in this line.
I wanted to make the timer have a longer duration for one of my users, and make the timer the normal, shorter duration for everyone else. The code to do this follows (it assigns a 45 minute time to user "fran", 5 minutes for anyone else):
Private Sub Form_Timer() ' IDLEMINUTES determines how much idle time to wait for before ' running the IdleTimeDetected subroutine. Dim IdleMinutes As Integer IdleMinutes = IIf(CurrentUser() = "fran", 45, 5) |
That code would substitute for the 1st 5 lines of the previous code. (Only the last 2 lines are different.)