我的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而无需更改?
答案 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值(")