韜晦日記

韜晦日記

Rietveldよりもプログラミングメインになりつつある

Rietveld解析初心者による備忘録とつぶやき

空白を含むファイルパスを変数として扱う方法

年の瀬に年末エントリーを書こうと思っていたのに…。 それは明日にでもかこう。

exeファイルを実行したい。

どうも。久しぶりのVBAに関する記事です。
VBAで実行ファイルを実行したい際にはWshShellオブジェクトRunメソッドを使いますよね。
この時、実行したいファイルのパスを与えなければなりません。
しかし、ファイルパスに空白が含まれていると正しく実行できず、二重引用符で囲む必要があります。

例えば
C:\Program Files\FOGE.exe
を実行したいときは以下のように書きます。

Dim ShellObject As Object
Set ShellObject = CreateObject("WScript.Shell")
ShellObject.Run """C:\Program Files\FOGE.exe"""

このファイルパスをプログラム上に直接書き込まずに変数として取得して使用したい場合は少し工夫が必要です。

取得したいファイルパスがA1セルに入力されているとします。 するとファイルパスは以下のように取得しますね。

Dim filePath as String
filePath = Cells(1, 1) 'あるいはRange("A1")でもいいけど

そして取得したファイルパスに引用符を文字列として付けたいのですが、普通にダブルコーテーションで囲って文字列を結合しようとしても意味がありません。

Dim filePath as String
filePath = """ & Cells(1, 1)  & """

Debug.Print filePath
' " & Cells(1, 1)  & "
' 上のように出力されてしまう。

このような場合は文字コードを直接指定してあげるとよさそうです。

Dim filePath as String
filePath = Chr(34) & Cells(1, 1)  & Chr(34)

Debug.Print filePath
' "C:\Program Files\FOGE.exe"
' これでおっけー

複数の引数を渡して実行する方法

おまけ

実行ファイルFOGE.exeに加えて引数Arg1, Arg2を与えたいとします。 これらのファイルも空白含んでいるとして、次のようにするといいでしょう。

filePath = Chr(34) & Cells(1, 1) & Chr(34)
Arg1 = Chr(34) & Cells(2, 1) & Chr(34)
Arg2 = Chr(34) & Cells(3, 1) & Chr(34)

Dim ShellObject As Object
Set ShellObject = CreateObject("WScript.Shell")
ShellObject.Run filePath & " " & Arg1 & " " & Arg2

以上です。