打开文件名包含空格的文件

8

我有一些简单的Excel VBA代码,用于打开非Excel文件,比如:

Sub scriptTest()
    Set objshell = CreateObject("Wscript.Shell")
    objshell.Run ("C:\TestFolder\Book1.pdf")
    Set objshell = Nothing
End Sub

运行此命令会在Acrobat Reader中打开文件。但是,如果我尝试打开一个文件名包含空格字符的文件:
Sub scriptTest()
    Set objshell = CreateObject("Wscript.Shell")
    objshell.Run ("C:\TestFolder\Bo ok1.pdf")
    Set objshell = Nothing
End Sub

我遇到了这个问题:

enter image description here

如果我从Windows开始菜单使用Run命令,两个文件都可以正常打开。我该如何解决这个问题?


@MykolaShchetinin 谢谢您的建议,但是正斜杠或反斜杠都没有任何效果。 - Gary's Student
@YowE3K 完美!发表一个回答,我会接受它。 - Gary's Student
2
为什么在VBA中要使用COM,当您完全可以访问Windows API时,根本不需要使用late binding这些东西。 - user692942
@Lankymart 好主意! 我会追求它。 - Gary's Student
1
@Gary'sStudent CreateProcess函数是开始的地方。 - user692942
@Lankymart 谢谢! - Gary's Student
1个回答

12
当执行语句 objshell.Run ("C:\TestFolder\Bo ok1.pdf") 时,您正在要求 shell 执行命令。
C:\TestFolder\Bo ok1.pdf

这被解释为请求执行程序C:\TestFolder\Bo.exe,并带有ok1.pdf参数。

您实际上想让shell执行该命令。

"C:\TestFolder\Bo ok1.pdf"

引号是命令解释器用来"分组"命令的一部分。

要获取该命令,您需要执行该语句。

objshell.Run """C:\TestFolder\Bo ok1.pdf"""

哇,有6个投票指出当你想要转义引用字符串时,需要将引号加倍。说真的,这以前没有被回答过吗? - user692942
1
@Lankymart,实际上不是需要转义引号,而是需要使用引号。(如果您找到了一个好的重复问题,请随时关闭问题,并ping我,以便我可以删除答案。) - YowE3K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接