Using task scheduler to run macro or vba every day?

Posted on 2015-02-24
Last Modified: 2015-03-02

I have a vba module within an Access database, I would like to schedule this vba script to run automatically every day unattended, can I call the script from windows task scheduler or should I use a batch file like below to run a macro and that macro run the vba script?
If a macro, what would that be?

@echo off
"C:\Program Files\Microsoft Office 15\root\office15\MSACCESS.EXE" "C:\POS\POSSales.accdb" /x DailyUpload
Question by:hellblazeruk
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
  • 2
  • +4
LVL 25

Expert Comment

ID: 40629349
Whatever you choose, use task scheduler as the trigger and then run the command.
LVL 58
ID: 40629394
I've found it easier to do a batch command file and then call that because you can then run it outside of the scheduler.

LVL 75

Assisted Solution

by:DatabaseMX (Joe Anderson - Microsoft MVP, Access and Data Platform)
DatabaseMX (Joe Anderson - Microsoft MVP, Access and Data Platform) earned 250 total points
ID: 40629442
Here is exactly the tool you need, which I use daily (ie, have is scheduled) to do exactly what you are talking about:

It works flawlessly and has many cool features, easy to configure and so on. It can also run as a Windows Service if you like - so even on reboot - it will start up and run your scheduled events.

In my case, it runs a macro  (which call vba code) in two different databases in sequence overnight, except on weekends (programmable of course).

Check it out ...

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

LVL 26

Expert Comment

ID: 40629561
You may definitely want to check out @mx's suggestion.
Office programs are meant to run in the context of a user.
Trying to schedule a VBA routine to run when a user is NOT logged on is the beginning of grief.
It may work...or not...but is an unsupported scenario form MS's viewpoint, so if you have problems, you'll get no joy.

On the flipside, depending on what the code does, you may be able to transform it into VBScript and run it unattended.
LVL 48

Expert Comment

by:Dale Fye
ID: 40629588
I've had lots of difficulty getting task scheduler to kick off an Access application when my computer is running unattended.  When it has worked, it works best using the method Jim mentioned above:
1.  create a .BAT file with the commands for opening the correct version of Access and the appropriate Access .mdb or .accdb file
2.  then run that .BAT file from the task scheduler.

I have not used the FMS Scheduler application, but have heard nothing but good comments about it.  I personally have several Access applications which run continuously on several clients computers and use tables to identify when to kick off specific other Access applications or processes.  I'm guessing that the FMS scheduler is similar to those, with a lot more bells and whistles.
LVL 58
ID: 40630406
I've actually got a scheduler I wrote in Access.   Didn't like the new one in Windows 2000 and up, so I duplicated the one in Windows XP.

Got it to run in the system tray and everything, but still, your limited to a foreground process (someone must be logged in).

I looked at a bunch of different schedulers before writing this one, and all struggled with running jobs in the background and of course as Nick and Dale pointed out, Office programs are pretty much designed to run as a foreground app.   You can keep a computer locked, but a user must be logged in.


Author Comment

ID: 40630475
I plan to keep the user logged in and the computer locked, so just need a way of the vb script running at a certain time.
LVL 58
ID: 40630476
Task scheduler will do you fine then...


Author Comment

ID: 40630504
when I run the .bat
@echo off
"C:\Program Files\Microsoft Office 15\root\office15\MSACCESS.EXE" "C:\POS\POSSales.accdb" /x DailyUpload

I get the popup:
Microsoft Access cannot find the object 'DailyUpload.'

the DailyUpload is not a macro its an object/module, do I need a macro called 'open' and that macro run the vba?
LVL 58
ID: 40630527
You need either:

1. An autoexec macro that calls that procedure

2. A startup form that calls the procedure and is specified in startup.

3. If your going to use the /x switch, a macro named "DailyUpload" which calls the procedure.

I cover all the different ways of starting a DB here:


Author Comment

ID: 40630669
Hi Jim,

Great video, I think the Autoexec macro is the option for me,
I am just looking at the macro option and cant find an option to open an object, I have a drop down list with many  options where should I be looking?

LVL 58
ID: 40630754
You want "RunCode" in a macro to call a procedure, and "Open...." to open other objects (i.e. OpenForm)

LVL 10

Accepted Solution

Luke Chung earned 250 total points
ID: 40630805
MX: Thanks for the kind words and testimonial about your experience with Total Visual Agent.

Alex, I'm the owner and founder of FMS, the creators of Total Visual Agent.

Whether you use our product or not, system administration such as database compact and backups are important in the maintenance of Access solutions. Automating that and other repetitive chores can significantly simplify your obligations. Total Visual Agent is designed for enterprises where automatic restart, security, audit trails, email notification of any problems, etc. are important.

A free trial is available. Hope you like it. Let me know if you have any questions. Thanks.
LVL 26

Expert Comment

ID: 40630928
Keep in mind that all sorts of other things besides Access can open database files.
Depending upon what "DailyUpload" does, it could be something that you could do entirely with VBScript.
If so, that eliminates 90% of the hassle as a VBScript can be scheduled to run regardless of login or not, and depending upon the situation of what is occurring, regardless of whether Access is installed or not.

If "DailyUpload" is opening one datasource and appending results to another, and little else, it's entirely scriptable.
LVL 58
ID: 40630948
<<If so, that eliminates 90% of the hassle as a VBScript can be scheduled to run regardless of login or not,>>

Excellent point.


Author Comment

ID: 40631389
I may try the free trial of Total Visual Agent but thought it may be over kill for a small project that I am doing,
The script I am using to simple

Option Compare Database
Option Explicit

Public Sub Module1()
    Const cPath As String = "C:\Export\"
    Dim intFN As Integer
    Dim strFilename As String
    Dim colNames As New Collection
    Dim vItem As Variant
    Dim dtFileDate As Date
    Dim qd As QueryDef
    strFilename = Dir(cPath & "*.csv")
    Do Until Len(strFilename) = 0
        dtFileDate = DateSerial(Mid(strFilename, 1, 4), Mid(strFilename, 5, 2), Mid(strFilename, 7, 2))
        vItem = DLookup("ImportDate", "saleshistory", "ImportDate=#" & dtFileDate & "#")
        If IsNull(vItem) Then
            DBEngine(0)(0).Execute "Delete * From ImportData"
            DoCmd.TransferText acImportDelim, "ImportSpec", "ImportData", cPath & strFilename, False
            DBEngine(0)(0).Execute "UpdateChangedItemNames"
            DBEngine(0)(0).Execute "AppendNewProducts"
            DBEngine(0)(0).Execute "AppendSalesData"
            Set qd = DBEngine(0)(0).QueryDefs("UpdateNullImportDate")
            qd!parmDate = dtFileDate
        End If
        colNames.Add strFilename
        strFilename = Dir()
    For Each vItem In colNames
         Name cPath & vItem As Replace(cPath & vItem, ".csv", ".txt")
End Sub

Featured Post

Three Reasons Why Backup is Strategic

Backup is strategic to your business because your data is strategic to your business. Without backup, your business will fail. This white paper explains why it is vital for you to design and immediately execute a backup strategy to protect 100 percent of your data.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It’s been over a month into 2017, and there is already a sophisticated Gmail phishing email making it rounds. New techniques and tactics, have given hackers a way to authentically impersonate your contacts.How it Works The attack works by targeti…
Code that checks the QuickBooks schema table for non-updateable fields and then disables those controls on a form so users don't try to update them.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

626 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question