尝试从VBA运行.bat脚本失败,没有错误代码

时间:2019-04-02 23:31:00

标签: excel vba batch-file

摘要: 我正在尝试使用Excel VBA在Windows计算机上运行.bat脚本。我在网上找到了描述如何执行此操作的参考,并且我已按照其中包含的说明进行操作。但是,我的.bat文件未运行。

详细信息: 我的.bat文件(“ test.bat”)包含以下代码:

echo off
echo This is a test...
pause
exit

它位于我的桌面上,具有以下路径:“ C:\ Users \ User1 \ Desktop”。当我双击此.bat文件或从命令行调用它时,它表现出所需的行为。即,它会暂停并等待我按任意键。

我正在尝试使用以下代码从Excel VBA运行相同的.bat文件:

Sub testBatchScript()

    'Print a message to the immediate window to confirm subroutine execution
    Debug.Print "The subroutine is running."

    'Initialize a windows shell object
    Dim wsh As WshShell
    Set wsh = New WshShell

    'Construct the full path to the .bat file
    Dim fullPath As String
    fullPath = Chr(34) + "C:\Users\User1\Desktop\test.bat" + Chr(34)

    'Run the .bat file
    Dim eCode As Long
    eCode = wsh.Run(fullPath, waitonreturn:=True, windowstyle:=1)

    If eCode <> 0 Then
        MsgBox ("An error occurred.")
    End If

End Sub

当我运行此子例程时,什么也没发生。没有弹出CMD窗口,也没有弹出任何提示错误的消息框。但是,由于出现在立即窗口中,因此我确实知道该子例程正在运行。

我很困惑为什么这不起作用。更令人困惑的是,几周前我才能够从VBA成功调用.bat脚本。

有人有什么解释或建议吗?

UPDATE1: 遵循@Dhamo在以下评论中的建议,我使用错误处理更新了VBA代码:

Option Explicit

Sub testBatchScript()

    On Error GoTo EH:

    'Print a message to the immediate window to confirm subroutine execution
    Debug.Print "The subroutine is running."

    'Initialize a windows shell object
    Dim wsh As WshShell
    Set wsh = New WshShell

    'Construct the full path to the .bat file
    Dim fullPath As String
    fullPath = Chr(34) + "C:\Users\User1\Desktop\test.bat" + Chr(34)

    'Run the .bat file
    Dim eCode As Long
    eCode = wsh.Run(fullPath, waitonreturn:=True, windowstyle:=1)

    If eCode <> 0 Then
        MsgBox ("An error occurred.")
    End If

    Exit Sub

EH:
    MsgBox ("The error description is: " & Err.Description)

End Sub

当我运行 this 代码时,仍然没有任何反应。

UPDATE2: 重新启动计算机后,今天早上我又重新运行了测试代码,这次这次,我弹出消息说:“错误描述是:权限被拒绝”。然后,我再次运行代码以查看是否可以复制此错误消息,并且没有弹出窗口!此外,无论我运行该代码多少次,都无法再次显示该错误消息。因此,重启似乎已经完成了某些事情……

“权限被拒绝”消息表明这是一个安全问题。有人有解决的想法吗?

1 个答案:

答案 0 :(得分:1)

不是答案,但评论太久了

如果将以下内容放入文件,请将其另存为test.vbs(而不是文本文档:如果不小心,记事本将创建test.vbs.txt):

Dim wsh, fullPath, ecode
Set wsh = WScript.CreateObject("WScript.Shell")
fullPath = "C:\programs\test.bat"
ecode = wsh.Run(fullPath, 1, True)
msgbox(ecode)

(根据您的具体情况调整了完整路径)。保存到例如在桌面上,然后单击图标。会发生什么?