2017-04-24 57 views
0

我有4個MS Access數據庫,每個數據庫都寫入相同的精確宏。這些宏需要大約4個小時才能運行,我想設置它們以便在我不工作時運行。以異步方式在單獨的數據庫中運行多個MS Access宏

我想象我的批處理文件看起來像這樣:

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

此,「*我只想下一行開始在當前行徹底完成*」被稱爲同步的,不是異步。這是一個腳本或程序運行的正常模式,所以你不應該改變任何東西。 – RBarryYoung

+0

RBarryYoung - 默認情況下,您同步運行腳本的聲明僅適用於內置命令和/或終端程序。這是正常的Windows UI程序不正確。在這種情況下,MS Access被啓動,但是當MS Access仍在運行時,執行控制立即返回到腳本並啓動任何宏。爲什麼人們在沒有測試和/或具備某些知識的情況下投票評論這些評論? –

+0

@CPerkins - OP提到'我的批處理文件'這可能意味着'cmd.exe'處理。 – lit

回答

0

我在過去使用VBS做過類似的事情,將文件另存爲.vbs,然後使用任務計劃程序在特定時間運行它。這將適用於子和功能。請參閱下面的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 
+0

使用循環。如果有100個數據庫呢? – dcg

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