Выполнять.файл bat из макроса Excel VBA
У меня проблема с моим макросом excel vba. Мне нужно, чтобы он выполнил пакетный файл, который находится в той же папке, что и книга excel. Иногда код работает хорошо. Я не знаю, что вызывает ошибку. Вот код:
Sub writebatch()
Sheets("code").Select
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:=ThisWorkbook.path & "code.bat",
FileFormat:=xlTextPrinter, CreateBackup:=False
Application.DisplayAlerts = True
ThisWorkbook.Saved = True
Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"
Application.Quit
End Sub
он записывает пакетный файл, но затем не выполняет его. Только один раз я получил окно команды, чтобы не закрываться, и он сказал код.файл bat не найден. Так что команда changedir работала. Можно ли запустить cmd.exe и запустите код.летучая мышь с относительный путь без изменения?
4 ответов
прежде всего, при запуске экземпляра CMD вам нужно заключить весь аргумент CMD, если вы используете любой тип операторов (&):
CMD /K "command1 & command2"
а затем заключите суб-внутренние аргументы, например:
CMD /K "command "path with spaces" & command"
значит нужно сделать что-то вроде этого:
Shell "cmd.exe /k ""cd " & """ & ThisWorkbook.path & """ & " && code.bat"""
обратите внимание, что я использовал "", чтобы избежать цитаты, но я не знаю, как избежать цитаты в VBA.
PS: Не забудьте также вложить код.летучая мышь!--13--> если у вас есть пространства, но только если у вас есть пространства.
Я уверен, что проблема в этой строке
Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"
вам нужно пространство перед &&
отделить его от cd
команда и после нее отделить ее от code.bat
.
Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat"
оболочка "cmd.exe / K cd / d" & ThisWorkbook.путь & " & & код.летучая мышь"
здесь, без / D cmd откроется в папке документа. by / d он откроется в D drive, вы можете изменить это в соответствии с вашим легким.
один из способов вставить цитату (") в строку-использовать функцию преобразования символьного кода Chr (34), 34-значение ASCII для кавычек (")