Excel VBA Shell 命令在文件路径中带有空格

Posted

技术标签:

【中文标题】Excel VBA Shell 命令在文件路径中带有空格【英文标题】:Excel VBA Shell command with spaces in file path 【发布时间】:2016-03-15 21:55:41 【问题描述】:
Public Sub openEntryFiles()
Dim filePath, shellCommand, agingsEntry, invenEntry As String
filePath = Range("CustomerPath").Value2 & "\files\"
agingsEntry = "agings\entry_EP.bat"
invenEntry = "inven\entry_EP.bat"

shellCommand = """%ProgramFiles(x86)%\TextPad 5\TextPad.exe"" -r -q -u """ & filePath & agingsEntry & """ -u """ & filePath & invenEntry & """"
Debug.Print shellCommand
Shell shellCommand, 0
End Sub

我正在尝试编写一个子例程,它将运行一个在文件路径中带有空格的 shell 命令。我已经对使用多个引号进行了大量研究,但是每当我运行代码时,我仍然会收到一个找不到文件的错误。输出到立即窗口的调试打印内容如下:

"%ProgramFiles(x86)%\TextPad 5\TextPad.exe" -r -q -u "\\ablsgaat002\aclwin\Clients\*****\files\agings\entry_EP.bat" -u "\\ablsgaat002\aclwin\Clients\*****\files\inven\entry_EP.bat"

将该字符串复制到 shell 窗口中效果很好,但是,从 VBA 中的 Shell 命令运行它不起作用。我做错了什么?

【问题讨论】:

我认为您缺少字符串中的引号。立即窗口不应该输出没有" 字符的字符串吗? @Santosh 如果没有 %ProgramFiles(x86)%\TextPad 5\TextPad.exe 周围的引号,该命令不会在 shell 窗口中运行。 这可能是需要转义的百分号。如果删除它们并提供完整路径,Excel VBA Shell 是否有效? 【参考方案1】:

使用Environ函数获取特殊文件夹

pathSpecial = Environ("ProgramFiles(x86)")
shellCommand = """" & pathSpecial  & "\TextPad 5\TextPad.exe"" -r -q -u """ & filePath & agingsEntry & """ -u """ & filePath & invenEntry & """"

【讨论】:

以上是关于Excel VBA Shell 命令在文件路径中带有空格的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vba 的 shell() 运行带有参数的 .exe?

如何在excel vba中传递包含excel文件路径的字符串以访问vba

从 VBA 中的 shell 命令捕获输出值?

Excel VBA 将工作表保存到路径作为 Excel 文件并覆盖文件

如何在excel VBA中获取保存文件的路径和名称?

Excel、VBA、PowerPivot、DataFeed 连接 - 更新文件路径