【问题标题】:VBA - Execute or Run .bat File Inside MacroVBA - 在宏内执行或运行 .bat 文件
【发布时间】:2020-08-03 18:53:12
【问题描述】:

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

这些脚本和宏运行良好,但是,我希望通过运行单个批处理文件来系统地执行脚本和宏,从而使用户的过程更加轻松。

我目前拥有的批处理文件,一一调用所有脚本,最后一个脚本打开其中包含一些宏的 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”命令的任何单个代码示例都会出现此错误。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    或者

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

    是的,检查权限。

    【讨论】:

    • 感谢您的回复,不幸的是我仍然遇到同样的错误 - 无效的过程调用。
    • 您是否尝试先从命令行执行以确保权限?
    • 当您说确保权限时,您的意思是能够访问该位置吗?如果是这样,我可以直接在此位置运行批处理文件或脚本文件以从该位置提取。
    • 我的意思是你能在 CLI 中运行“ChDir X:\Test\Termination_Reports_Scripts && Execute_Terminations.bat”吗?
    • 请原谅我的无知,但我不知道.. 我在 cmd 中输入“ChDir X:\Test\Termination_Reports_Scripts && Execute_Terminations.bat”并得到一个错误:文件名、目录名或卷标语法是不正确.. 然后没有引号我得到错误 .bat is not Recognized
    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢您的反馈。不幸的是,我不再从事需要这个的工作了,哈哈。所以下次我会记住的!是的,你是对的......这将是一个巨大的安全问题。再次感谢:)
    • 嘿,没问题 - 很遗憾听到这个消息。尽管有时差,我还是把它放在那里,因为如果我正在寻找答案,我希望有人把它贴在这里:) 感谢您的赞誉,这么久才回来!
    【解决方案3】:

    (1) 检查X目录用户的权限。
    (2) 测试代码,去掉目录名中的空格。

    也可以试试下面的代码(请尝试去掉目录名中的空格)。

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

    【讨论】:

    • 感谢您的回复,不幸的是我仍然遇到同样的错误 - 无效的过程调用。
    【解决方案4】:

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

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

    【讨论】:

    • 感谢您的回复,不幸的是我仍然遇到同样的错误 - 无效的过程调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多