#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? Это работает? Если да, это докажет необходимость присвоения права собственности на папку. Если это выглядит сложно, а ваша учетная запись имеет тип администратора, я могу написать скрипт, который автоматически передаст права собственности пользователю, который его запускает…