Как вызвать пакетный файл из скрипта VBA

#vba #batch-file #permissions

#vba #пакетный файл #разрешения

Вопрос:

Я не могу вызвать файл «test1.bat» из этого скрипта Visual basic. Единственное, что я получаю, это «Ошибка времени выполнения 70, доступ запрещен». У кого-нибудь был подобный результат или опыт.

 Sub test()

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wsh.Run "C:UserstaischaDesktoptest1.bat", windowStyle, waitOnReturn

End Sub
  

Я уже пытался изменить файл .bat на .cmd. Я также попытался получить доступ к bat-файлу по ссылке от имени администратора.Я могу выполнить пакетный файл без каких-либо проблем, если дважды щелкнуть значок или вызвать ir через cmd. Я подозреваю, что брандмауэр блокирует makro.
Может быть, кто-нибудь может мне помочь.

Ответ №1:

 Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "test.bat"
oShell.Run strArgs, 0, false
  

Это делает файл невидимым, но выполняет их. Вы также можете ввести:

 Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c test.bat"
oShell.Run strArgs, 0, false
  

Чтобы завершить процесс, когда он завершится.
Если вам нужно запустить его с помощью окна:

 Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c start test.bat"
oShell.Run strArgs, 0, false
  

сначала они создают объект, затем запускают функцию cmd, вызываемую cmd с /c параметром, что означает: код остановится, и cmd закроется, когда они перестанут выполняться. Но сначала он запустит окно с вашим bat-файлом. Это делает файл видимым.

Надеюсь, я вам помог.

Ответ №2:

Попробуйте этот более простой способ, пожалуйста:

 Shell "C:UserstaischaDesktoptest1.bat", 1
  

Если это не сработает, вы должны стать владельцем обсуждаемой папки. Я имею в виду учетную запись пользователя, которая выполняет код.

Является ли ваша учетная запись пользователя типом администратора?

Отредактировано:

Пожалуйста, протестируйте следующий код и отправьте отзыв:

 Sub testCreateRunBat()
 Dim FSO As Object, lngOK As Long, BT As Object
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set BT = FSO.OpenTextFile(ThisWorkbook.Path amp; "Test.bat", 2, True)
  BT.Write "C:"
  BT.WriteLine
  BT.Write "Dir"
  BT.Close

 lngOK = Shell(ThisWorkbook.Path amp; "Test.bat", 1)
 If lngOK <> 0 Then MsgBox "Everything OK!"
End Sub
  

Комментарии:

1. Спасибо FaneDuru. Если я выполняю ваш код, я получаю: ошибка времени выполнения 5, недопустимый вызов процедуры или недопустимый аргумент. Да, моя учетная запись является учетной записью администратора.

2. @Andri Это странно… Я отредактирую свой ответ и помещу фрагмент кода, создающий, а затем открывающий файл bat. Пожалуйста, протестируйте его и отправьте отзыв.

3. @Andri Ты нашел время, чтобы протестировать код, создающий и запускающий файл .bat? Это работает? Если да, это докажет необходимость присвоения права собственности на папку. Если это выглядит сложно, а ваша учетная запись имеет тип администратора, я могу написать скрипт, который автоматически передаст права собственности пользователю, который его запускает…