如何使批处理文件等待Excel宏完成

时间:2014-07-22 20:44:50

标签: javascript excel vba batch-file imacros

我已经搜索过高低的解决方案,但是找不到解决方案。

我有一个批处理文件,我在其中调用一个调用Excel宏来运行的JavaScript文件。我希望批处理文件等待宏完成,然后继续。

我使用JavaScript文件调用Excel宏,因为我不知道直接从批处理文件运行宏的方法。这可能是更好的方式,但我还没有找到一个。

在我的.bat文件中,我尝试过:

Do some batch stuff, including iMacros
WAIT/ cscript.exe RunExcelJScript.js
Do some more batch stuff with iMacros

但在继续做更多批处理之前,它不会等待宏完成。我假设它是因为.bat文件实际上只是等待.js文件完成,而不是随后由.js文件打开的Excel宏。

我知道我可以使用超时来设置一段特定的等待时间,但宏非常复杂,需要很长的时间才能运行。

我需要一种方法来实现:

  • 调用Excel宏直接从.bat文件运行,这样我就可以使用/ WAIT

  • 告诉JavaScript文件等待宏完成,然后创建某种类型的标志,触发.bat文件继续。

.bat / .js / Macro将每15分钟运行一次。

我的.js文件是这样的:

var objXL = WScript.CreateObject("Excel.Application");
objXL.Visible = true;
objXL.WorkBooks.Open("FilePathTo/Enrollments.xlsm");
objXL.Run("NameOfExcelModule.UpdateAndExportToMoodle");

有人能提出如何让.bat文件等待我的Excel宏完成的建议吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情,只需找到imacro任务的名称。任务运行时%ERRORLEVEL%将为" 0"当任务完成时,%ERRORLEVEL%将变为" 1"循环结束。

 :loop
for /f "tokens=2 delims=: " %%a in ('tasklist ^| find "TaskName.exe"' ) do (
    if "%ERRORLEVEL%"=="0" (
        ping -n 10 localhost > nul 2>nul
        goto loop
    )
)