从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值