Expiring Today—Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Using task scheduler to run macro or vba every day?

Posted on 2015-02-24
Medium Priority
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 1000 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 ...

Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.

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 1000 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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

As tax season makes its return, so does the increase in cyber crime and tax refund phishing that comes with it
In Part II of this series, I will discuss how to identify all open instances of Excel and enumerate the workbooks, spreadsheets, and named ranges within each of those instances.
With Microsoft Access, learn how to start a database in different ways and produce different start-up actions allowing you to use a single database to perform multiple tasks. Specify a start-up form through options: Specify an Autoexec macro: Us…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

719 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