从 Excel VBA 宏执行 .bat 文件

问题描述 投票:0回答:6

我的 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而无需更改dir?

vba excel batch-file
6个回答
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,但仅限于有空格时。


4
投票

我很确定问题出在这一行

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

您需要在

&&
前面留一个空格以将其与
cd
命令分隔开,并在其后留一个空格以将其与
code.bat
分隔开。

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

3
投票

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

这里,如果没有 /d cmd 将在文档文件夹中打开。 通过 /d 它将在 d 驱动器中打开,您可以根据您的方便更改此设置。


2
投票

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


0
投票

希望对你有用。

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

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

End Sub

0
投票

' 运行批处理文件

Sub RunBatchFile()

Dim batchFilePath As String
batchFilePath = "**actual path to your batch file**"

' Run the batch file and capture the process ID
Dim shellResult As Double
Dim shellProcess As Object
Set shellProcess = CreateObject("WScript.Shell")
shellResult = shellProcess.Run(batchFilePath, vbHide, True)

' Check if the batch file was executed successfully
If shellResult = 0 Then
    ' Batch file completed successfully
    MsgBox "Batch file completed successfully.", vbInformation
Else
    ' Batch file failed or returned an error code
    MsgBox "Batch file failed with error code: " & shellResult, vbExclamation
End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.