8

I have some simple Excel VBA code that opens non-Excel files like:

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

Running this opens the file in the Acrobat Reader. However if I try to open a file whose name contains a space character like:

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

I get:

enter image description here

Both files open fine if I use the Run command from the Windows Start menu. How can I overcome this problem ??

Community
  • 1
  • 1
Gary's Student
  • 95,722
  • 10
  • 59
  • 99

1 Answers1

12

When executing the statement objshell.Run ("C:\TestFolder\Bo ok1.pdf"), you are asking the shell to execute the command

C:\TestFolder\Bo ok1.pdf

This is interpreted as being a request to execute the program C:\TestFolder\Bo.exe with a parameter of ok1.pdf.

You actually want the shell to execute the command

"C:\TestFolder\Bo ok1.pdf"

where the quotation marks are used by the command interpreter to "group" parts of the command together.

To obtain that command, you need to execute the statement

objshell.Run """C:\TestFolder\Bo ok1.pdf"""
YowE3K
  • 23,852
  • 7
  • 26
  • 40
  • Wow, 6 votes for pointing out when you want to escape a quoted string you need to double the quotes. Seriously, this hasn't been answered before? – user692942 Oct 05 '17 at 23:41
  • 1
    @Lankymart It wasn't actually that the quotation marks needed to be escaped, it was that the quotation marks needed to be used. (If you find a good duplicate, please feel free to close the question, and ping me so I can delete the answer.) – YowE3K Oct 06 '17 at 00:13