Выполнять.файл 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 для кавычек (")