By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,261 Members | 1,684 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,261 IT Pros & Developers. It's quick & easy.

Countdown Time Left before Idle Minutes Timeout

P: 68
I have used Microsoft's instructions https://support.microsoft.com/en-us/kb/128814 and your threads http://bytes.com/topic/access/answer...off-idle-users and http://bytes.com/topic/access/answer...ime-inactivity to create an Application Quit procedure that opens a warning form. The user has an option to reset the timer and continue working (command button) or to Exit the application (another command button). If they do nothing for 5 minutes the application quits. This all works fine. My issue is that I want to show the countdown of the minutes and seconds left before the application quits. I am getting 00:00 for the countdown. Could you please look at my code (line 57) and tell me what I am doing wrong? Thank you.

Expand|Select|Wrap|Line Numbers
  1. Private Sub Form_Timer()
  2.     'IDLEMinutes determines how much idle time to wait before
  3.     'running the IdleTimeDetected Subroutine.
  4.     Const IDLEMINUTES = 1
  5.  
  6.     Static PrevControlName As String
  7.     Static PrevFormName As String
  8.     Static ExpiredTime
  9.  
  10.     Dim ActiveFormName As String
  11.     Dim ActiveControlName As String
  12.     Dim ExpiredMinutes
  13.  
  14.     On Error Resume Next
  15.  
  16.     'Get the active form and control name.
  17.     ActiveFormName = Screen.ActiveForm.Name
  18.     If Err Then
  19.         ActiveFormName = "No Active Form"
  20.         Err = 0
  21.     End If
  22.  
  23.     ActiveControlName = Screen.ActiveControl.Name
  24.     If Err Then
  25.         ActiveControlName = "No Active Control"
  26.         Err = 0
  27.     End If
  28.  
  29.     ' Record the current active names and reset ExpiredTime if:
  30.          '    1. They have not been recorded yet (code is running
  31.          '       for the first time).
  32.          '    2. The previous names are different than the current ones
  33.          '       (the user has done something different during the timer
  34.          '        interval).
  35.     If (PrevControlName = "") Or (PrevFormName = "") _
  36.         Or (ActiveFormName <> PrevFormName) _
  37.         Or (ActiveControlName <> PrevControlName) Then
  38.             PrevControlName = ActiveControlName
  39.             PrevFormName = ActiveFormName
  40.             ExpiredTime = 0
  41.     Else
  42.         ' ...otherwise the user was idle during the time interval, so
  43.         ' increment the total expired time.
  44.         ExpiredTime = ExpiredTime + Me.TimerInterval
  45.     End If
  46.  
  47.     ' Does the total expired time exceed the IDLEMINUTES?
  48.     ExpiredMinutes = (ExpiredTime / 1000) / 60
  49.     Debug.Print "Warning Expired Minutes: " & Format(ExpiredMinutes, "hh:nn")
  50.  
  51.     If ExpiredMinutes >= IDLEMINUTES Then
  52.         ' ...if so, then reset the expired time to zero...
  53.         ExpiredTime = 0
  54.         ' ...and call the IdleTimeDetected subroutine.
  55.         IdleTimeDetected ExpiredMinutes
  56.     Else
  57.         Me.txtTimeLeft = Format((IDLEMINUTES - ExpiredMinutes) / 3600, "hh:nn")
  58.         Debug.Print "Warning Time Left: " & Format((IDLEMINUTES - ExpiredMinutes) / 3600, "hh:nn")
  59.     End If
  60.  
  61. End Sub
May 26 '15 #1

✓ answered by jforbes

Try using 1440 instead of 3600 on Line 57:
24 hours * 60 Minutes = 1440 minutes per day.

You also might want to use Minutes and Seconds in the Format string, like:
Expand|Select|Wrap|Line Numbers
  1. Me.txtTimeLeft = Format((IDLEMINUTES - ExpiredMinutes) / 1440, "nn:ss")

Share this Question
Share on Google+
4 Replies


jforbes
Expert 100+
P: 1,107
Try using 1440 instead of 3600 on Line 57:
24 hours * 60 Minutes = 1440 minutes per day.

You also might want to use Minutes and Seconds in the Format string, like:
Expand|Select|Wrap|Line Numbers
  1. Me.txtTimeLeft = Format((IDLEMINUTES - ExpiredMinutes) / 1440, "nn:ss")
May 26 '15 #2

Rabbit
Expert Mod 10K+
P: 12,430
A couple of things wrong.
  • The format string you are using is for datetime data types. What you have is a numeric data type.
  • You are doing 1 - expired minutes. Then dividing the minutes by 3600. Which doesn't make any sense because according to your first post, expired minutes can't exceed 5. So what you have is a very small number divided by a very large number. Basically, zero.
May 26 '15 #3

P: 68
Thank you, jforbes. That did it.
May 26 '15 #4

P: 68
Rabbit, thank you for the explanation. I appreciate knowing the answer and understanding what I was doing wrong.
May 26 '15 #5

Post your reply

Sign in to post your reply or Sign up for a free account.