异步运行多个MS Access宏在不同的数据库中

时间:2017-04-24 19:20:27

标签: vba batch-file ms-access cmd

我有4个MS Access数据库,每个数据库都写入相同的精确宏。这些宏需要大约4个小时才能运行,我想设置它们以便在我不工作时运行它们。

我设想我的批处理文件看起来像这样:

msaccess.exe /ro "c:\Folder1\DB1.accdb" /x MyMacro
msaccess.exe /ro "c:\Folder2\DB2.accdb" /x MyMacro
msaccess.exe /ro "c:\Folder3\DB3.accdb" /x MyMacro
msaccess.exe /ro "c:\Folder4\DB4.accdb" /x MyMacro

但是,我只想在当前行完成时启动下一行。有没有办法控制这个?

我选择了START / WAIT命令。我不得不修改MyMacro以在每次运行后关闭MS Access,但它就像一个魅力。谢谢大家!

3 个答案:

答案 0 :(得分:0)

我以前使用VBS做了类似的事情,将文件保存为.vbs,然后使用任务计划程序在特定时间运行它。这将适用于Subs和Functions。请参阅下面的vbs代码,您只需添加2个部分即可为其提供总共4个数据库。

dim accessApp
set accessApp = createObject("Access.Application")
accessApp.visible = false
accessApp.OpenCurrentDataBase("Database Path Here")
accessApp.Run "Sub or Function Name Here"
accessApp.Quit
set accessApp = nothing

dim accessApp2
set accessApp2 = createObject("Access.Application")
accessApp2.visible = false
accessApp2.OpenCurrentDataBase("Database Path Here")
accessApp2.Run "Sub or Function Name Here"
accessApp2.Quit
set accessApp2 = nothing

答案 1 :(得分:0)

此脚本将在DB_LIST中的每个数据库上运行,如果出现错误则停止。这是你要找的东西吗?

SETLOCAL ENABLEDELAYEDEXPANSION
SET "DB_LIST=DB1 DB2 DB3 DB4"

FOR %%d IN (%DB_LIST%) DO (
    msaccess.exe /ro "c:\Folder4\%%~d.accdb" /x MyMacro
    SET EXITCODE=%ERRORLEVEL%
    IF !EXITCODE! NEQ 0 (
        ECHO ERROR: Failed in %0 running database %%~f, EXITCODE is !EXITCODE!
        GOTO TheEnd
    )
)

:TheEnd
EXIT /B %EXITCODE%

答案 2 :(得分:0)

我选择了START / WAIT命令。我不得不修改MyMacro以在每次运行后关闭MS Access,但它就像一个魅力。谢谢大家!

我的代码最终看起来像这样:

START /WAIT msaccess.exe /ro "c:\Folder1\DB1.accdb" /x MyMacro
START /WAIT msaccess.exe /ro "c:\Folder2\DB2.accdb" /x MyMacro
START /WAIT msaccess.exe /ro "c:\Folder3\DB3.accdb" /x MyMacro
START /WAIT msaccess.exe /ro "c:\Folder4\DB4.accdb" /x MyMacro