VBA - 在宏内执行或运行.bat文件

时间:2018-04-19 10:37:52

标签: excel vba excel-vba

我一直在尝试通过创建脚本和宏等来为我工作的一些用户自动执行一系列管理事件。

这些脚本和宏工作得很好,但是,我想通过运行一个系统地执行脚本和宏的批处理文件,使用户更容易进行处理。

我目前拥有的批处理文件,逐个调用所有脚本,最后一个脚本打开其中一个xlsm工作簿,其中包含一些宏 - 这里是问题所在 - 仍然有脚本执行但只有在此工作簿执行了所有宏后才能执行它们。

所以我最初的想法是测试工作簿是否打开,如果是,将下一个脚本的执行延迟一分钟左右,然后一次又一次地测试......直到它关闭..然后我想或许从宏中执行下一组脚本(也在批处理文件中)会更容易。

所以,我有这段代码:

Sub Run_BAT()

    Set obj = CreateObject("Wscript.Shell")

    obj.Run Chr(34) & "X:\Test\" & "Termination Reports Scripts\" & "Execute_Terminations.bat" & Chr(34), 0, True

    Set obj = Nothing

End Sub

这给了我一个错误:

  

拒绝权限

然后是这段代码:

Sub WriteAndRunBatFile()

Call Shell("X:\Test\Termination Reports Scripts\Execute_Terminations.bat")

End Sub

这给了我错误:

  

无效的程序调用

包含“Shell”命令的任何单个代码示例都会出现此错误。

4 个答案:

答案 0 :(得分:1)

或者

Call Shell("cmd.exe /C /K " & "ChDir X:\Test\Termination_Reports_Scripts && Execute_Terminations.bat", vbNormalFocus)

是的,请检查权限。

答案 1 :(得分:1)

我的理论是您在应用程序中缺少对Windows脚本宿主对象模型的引用。

在VBA编辑器中,转到“工具”,“参考”,确保已勾选。

出于安全原因,默认情况下未选中它-想象在Microsoft Office应用程序的每个实例中意外访问命令提示符...!

答案 2 :(得分:0)

(1)检查该X目录的用户的许可 (2)通过从目录名称中删除空格来测试代码。

还可以尝试以下代码 (请通过从目录名称中删除空格来尝试)。

Sub Button1_Click()
    Call Shell("CMD.EXE /C " & "X:\Test\Termination_Reports_Scripts\Execute_Terminations.bat")
End Sub

答案 3 :(得分:0)

将您的路径放在引号中的bat文件中:

Call Shell("cmd /c ""S:/somebatfile.bat""", vbNormalFocus)