从Excel VBA宏执行.bat文件

时间:2012-11-23 13:45:22

标签: excel vba excel-vba batch-file

我的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

它写入批处理文件,但之后不执行它。只有一旦我得到命令窗口不关闭,它说无法找到code.bat文件。所以changedir命令工作。是否可以运行cmd.exe并使用相对路径运行code.bat而无需更改?

4 个答案:

答案 0 :(得分:7)

首先,当您启动CMD实例时,如果使用任何类型的运算符(&),则需要包含整个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 ,但是只有空格。

答案 1 :(得分:4)

我很确定问题归结为这一行

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

&&前面需要一个空格,以便将其与cd命令分开,然后将其与code.bat分开。

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

答案 2 :(得分:2)

Shell“cmd.exe / k cd / d”& ThisWorkbook.path& “&& code.bat”

此处,没有/ d cmd将在文档文件夹中打开。 通过/ d它将在d驱动器中打开,您可以根据您的方式更改它。

答案 3 :(得分:2)

将引号(")插入字符串的一种方法是使用字符代码转换函数Chr(34),34是引号的ASCII值(")