从Excel VBAmacros执行.bat文件
我有一个与我的Excel VBAmacros的问题。 我需要它执行与Excel工作簿在同一文件夹中的batch file。 代码有时运作良好。 我不知道是什么造成的错误。 代码如下:
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
它写入batch file,但不执行它。 只有一次我得到命令窗口不closures,它说code.bat文件找不到。 所以changedir命令起作用了。 是否可以运行cmd.exe并运行相对path的code.bat而不必更改?
首先,当你启动一个CMD实例时,如果你使用任何types的运算符(&),你需要把整个CMD参数括起来:
CMD /K "command1 & command2"
然后将子内部参数括起来,如下所示:
CMD /K "command "path with spaces" & command"
所以你需要做这样的事情:
Shell "cmd.exe /k ""cd " & """ & ThisWorkbook.path & """ & " && code.bat"""
注意我用“”“来转义引号,但是我不知道如何在VBA中转义引号。
PS:记住如果你有空格也要附上code.bat ,但是只有空格。
我很确定问题在于这一行
Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"
您需要在&&
前面有一个空格,将它与cd
命令分隔开来, code.bat
将它从code.bat
分离出来。
Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat"
Shell“cmd.exe / k cd / d”&ThisWorkbook.path&“&& code.bat”
在这里,没有/ d cmd将在文档文件夹中打开。 通过/ D它将在D驱动器打开,你可以改变这个按你的容易。
将一个引号(“)插入到string中的一种方法是使用字符代码转换函数Chr(34),其中34是引号(”)的ASCII值