Access VBA Timer Stops after a few hours

I have a computer that has an app that has an on timer event. The computer is used for this only. The computer gets locked and the screen saver eventually comes on.
The timer continues to fire for up to about 3 hours... then it just stops.
When i saw that it stopped, i unlocked the PC, and the app was still open on the screen, but the timer wasn't running any longer. Once I closed the app, and re-opened, the timer started again and worked fine.
Any suggestions on why the timer would have stopped, and how I can prevent this from happening. I need the timer to continue running in 12 hour increments, even if the PC is locked and Screen Saver activated.
Who is Participating?
Rey Obrero (Capricorn1)Commented:
check your Power options properties

right click on the desktop >properties
select the screen saver tab
click on monitor power
select  Power schemes
make sure that
       Turn off hard disks is set to  Never
       System stand By      Never

you can save this setting...
I would actually code a timer object myself in this case.  Create a loop that loops once per second.  You can cause the loop to only loop once per second by calling the Threading.Thread.Sleep(1000).  This thread call works in .NET based apps so I would need to know what version of Access your running to locate the corresponding sleep call for you.  It might mean that you need to declare the sleep function directly as an WIN32 API call.   The code to do this is in the code block below....

Please note that 1000 milliseconds in this call is ~ approximately ~ 1 second.  If you need / want more precision than that, you may need to get a high precision ActiveX control (for earlier versions of access) or a corresponding .net control that provides the same service.

For vb6 (which creates activex objects) the article you want for high precision timers is

For .net there are three links:

Please note the InformIT link looks to me to have a huge amount of good info on this subject, but requires knowledge or the learning of some really cool API calls.

'put this at the top of the code file or in module declarations.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'example call
Sleep 1000

Open in new window

a260148Author Commented:
Ok, thanks for your replies...
As this is a machine that everyone uses... they don' t have admin rights on it... therefore I can't see the "Screen Saver" tab on the Properties menu. I did however check the "Powe Options Properties" under the Control Panel, and "Turn Off Hard Disks" and "system standby" are both set to Never. That was my first thought also... but apparently all PC's in our company automatically default to these options.

Not sure what you mean... when you say "I would actually code a timer object myself in this case.  Create a loop that loops once per second. " You talking about making a timer in some other app? I only have MS Access and VBA at my disposal, and using any VBA stops after a certain amount of time.
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

Well, if VBA actually stops to function altogether that is something that I am not sure I can solve.  The way I read your answer was that the Timer Object stopped to function.  The timer is part of the control suite that you have access to in the toolbox.  

As far as coding my own timer, you can do this in VBA as well to the best of my knowledge.  I am not sure what version of access you are using but anything 2000 and up should be able to make a call to the WIN32 API.  This would be the same as doing a Win32 API call in any other language.  The URL: does not relate directly to what your doing but it does show syntax for declaring the API and the code I put in my first post can be substituted and used in the same manner.  Then you create a loop like this:

'this would be an infinite loop, this is what you want.
Do Until True = False
    'code that compares your timer and executes your code when you want it to.
     'code to count the clock
    NumberOfSeconds = NumberOfSeconds + 1
    Sleep 1000
a260148Author Commented:
Thanks for your reply... So your saying instead of using the "On Timer" event at all... just having the code continuously loop. Makes sense, but i'm not if it is actually just the "On Timer" event that stops after some amount of time... or if its VBA just suppends all together.

I can't find anything on the web about VBA suspending... but that is what seems to be happening... after right about 3 hours.
Gustav BrockCIOCommented:
> The computer is used for this only.

OnTimer may work nicely. We had a machine running for years on Win2000 with a loop firing every minute. Your issue may be ram consumption due to what your loop performs.
Also, shut down the screen saver. These can be very aggressive. And as capricorn notes, remove all power saving settings (and turn of the monitor).

>  this is a machine that everyone uses

Now that is a new situation. If so everything may happen.
Get another machine for the users.

a260148Author Commented:
All, I re-started the app, and it has been running for 12 hours with not stopping of the Timer or VBA. Not sure why it stopped all the sudden on my first couple attempts? I didn't change any of the settings on the PC. I did however change a little of the Code. All i did different was instead of Dimming a RS, I used a Run SQL on timer. Not sure why or if this is what made the difference... but in any doubt, seems to be working fine now. Thanks to everyone for there input.
Gustav BrockCIOCommented:
> Not sure why or if this is what made the difference

You probably didn't clean up:

  Set rs = Nothing

All objects _must_ be set to Nothing before exiting the function or you eat up memory slowly but surely.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.