РЕЗЮМЕ: Я пытаюсь запустить скрипт .bat на компьютере с Windows, используя Excel VBA.Я нашел ссылки в Интернете, описывающие, как это сделать, и я следовал инструкциям, содержащимся в нем.Однако мой файл .bat не работает.
ДЕТАЛИ. Мой файл .bat ("test.bat") содержит следующий код:
echo off
echo This is a test...
pause
exit
Он расположен на моем рабочем столе,по следующему пути: «C: \ Users \ User1 \ Desktop».Когда я дважды щелкаю этот файл .bat или вызываю его из командной строки, он демонстрирует желаемое поведение.А именно, он останавливается и ждет, пока я нажму любую клавишу.
Я пытаюсь запустить этот же файл .bat из Excel VBA, используя следующий код:
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 и не появляется окно сообщения, указывающее на ошибку.Однако я знаю, что подпрограмма запущена из-за сообщения, которое появляется в ближайшем окне.
Я озадачен тем, почему это не работает.Что еще больше удивляет, так это то, что я смог успешно вызывать сценарии .bat из VBA всего несколько недель назад.Предложение в комментариях ниже, я обновил код 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
Когда я запускаю этот код, все равно ничего не происходит.
ОБНОВЛЕНИЕ2: IЭтим утром снова запустили тестовый код, после перезагрузки компьютера, и в этот раз я получил всплывающее сообщение: "Описание ошибки: Разрешение отказано".Затем я снова запустил код, чтобы посмотреть, смогу ли я воспроизвести это сообщение об ошибке, и всплывающего окна не было!Кроме того, я не могу получить сообщение об ошибке, независимо от того, сколько раз я запускаю код.Так что перезапуск, похоже, что-то сделал ...
Сообщение «Отказано в доступе» предполагает, что это проблема безопасности.У кого-нибудь есть идеи по ее решению?