【问题标题】:How to make a batch file wait for an Excel Macro to complete如何使批处理文件等待 Excel 宏完成
【发布时间】:2014-07-22 20:44:50
【问题描述】:

我到处寻找解决方案,但一直找不到。

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

我使用 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 宏完成提供建议?

【问题讨论】:

    标签: javascript excel vba batch-file imacros


    【解决方案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
        )
    )
    

    【讨论】:

    • 我让批处理等待我的 Excel 宏使用 /WAIT 方法运行。现在我需要它来等待在 Firefox 中运行的 iMacro。你的建议听起来很有希望,我会试一试。谢谢!
    • 对于通过搜索偶然发现此问题的任何人,我用来使批处理文件等待 Excel 宏运行的代码是“START "RunExcelScript" /WAIT cscript.exe RunExcelJScript.js”。 .js 文件内容显示在我原来的问题中。
    • 不是针对我最初的问题,但我确实使用了您的想法(但稍作修改)使文件等待 iMacro。 +1 的想法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2016-02-08
    • 1970-01-01
    • 2015-10-19
    • 2014-01-12
    相关资源
    最近更新 更多