7

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

5 回答 5

8

首先,当您启动 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 ,但前提是有空格。

于 2012-11-23T15:17:32.650 回答
4

我很确定问题出在这条线上

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

您需要在 前面有一个空格&&将其与cd命令分开,在它之后将其与code.bat.

Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat"
于 2012-11-23T14:45:57.593 回答
3

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

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

于 2014-02-25T09:39:15.347 回答
2

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

于 2016-11-30T16:26:36.910 回答
0

我希望它对你有用。

Dim sfilename, fileName As String
Sub Run_file_bat()
    fileName = "" & ThisWorkbook.Path & "\code.bat" & ""

    VBA.Shell "Explorer.exe " & fileName, vbNormalFocus

End Sub
于 2021-10-25T08:28:37.943 回答