Выполнять.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 и запустить код.летучая мышь с родственником путь без необходимости менять его?

942   4  

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: Не забудьте также вложить код .bat Если у вас есть пробелы, но только если у вас есть пробелы.

Я почти уверен, что проблема сводится к этой строке

Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"

Вам нужно пространство перед командой &&, чтобы отделить ее от команды cd и после нее отделить ее от команды code.bat.

Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat"

Shell " cmd.exe / k cd / d " & ThisWorkbook.путь & " & & код.летучая мышь "

Здесь, без /d cmd откроется в папке document. by /d он откроется в диске d, вы можете изменить это в соответствии с вашим easy.

Один из способов вставить кавычку (") в строку заключается в использовании функции преобразования символьного кода Chr (34), 34 является значением ASCII для кавычек (")

Comments

    Ничего не найдено.