2017-06-29 9 views
0

私のVBAプログラムは、以下の通りであるスペースを持っている場合などであるVBAコードを含むワークブックの同じディレクトリに、VBA Shell関数は、ディレクトリの名前が

Sub Test() 
    Dim ret_val As Variant 
    ChDir ThisWorkbook.path 
    ret_val = Shell("C:\Python27\python.exe " & ThisWorkbook.path & "\Hello.py", vbNormalFocus) 
End Sub 

私のPythonスクリプトHello.pyをPythonスクリプトを実行するのに失敗しました以下、

for i in range(1000): 
    print "Hello" 

は、Excelイミディエイトウィンドウで?"C:\Python27\python.exe " & ThisWorkbook.path & "\Hello.py"は私にC:\Python27\python.exe C:\Company\Folder 1\Hello.pyを与えて入力します。この場合、Excel VBAからTest()を実行すると、あたかも開いているがあたかもpythonスクリプトを実行していないかのように暗いプロンプトウィンドウが点滅します。

しかし、私は(通知が今のディレクトリの名前にスペースがない)Folder1にフォルダ名Folder 1の名前を変更した場合は、ExcelのVBAからTest()を実行すると、「こんにちは」に書き込まれたプロンプトウィンドウを表示されますと、私は見ることができますしばらくの間スクリーン。


VBAでシェル機能を使用する場合、フォルダ名にスペースを入れることはできません。しかし、本当にこのバグの原因は何ですか?また、名前にスペースがあるフォルダを使用できるように修正する方法はありますか?

+0

ファイル名を引用符で囲んでみましたか?私はVBAユーザーではありませんが、C:\ Python27 \ python.exe ""&ThisWorkbook.path& "\ Hello.py" ""仕事は?これはうまくいけば 'C:\ Python27 \ python.exe" C:\ Company \ Folder 1 \ Hello.py "を与えます。 –

+0

'CHR(34)'はVBAで二重引用符を生成します – mjsqu

答えて

0

これは、Chr(34)を使用して、パス名の前とファイル名の後に二重引用符を生成します。

Sub Test() 
    Dim ret_val As Variant 
    ChDir ThisWorkbook.path 
    Dim command As String 
    command = CHR(34) & "C:\Python27\python.exe" & CHR(34) & " " & CHR(34) & ThisWorkbook.path & "\Hello.py" & CHR(34) 
    ret_val = Shell(command, vbNormalFocus) 
End Sub 
+0

'C:\ Python27 \ python.exe"と同じトリックをアプリケーションに実行する必要はないようです。ディレクトリ名 'Python27'はいつかPython27に変更されますか? – Nicholas

+0

はい、好きな場所にpythonをインストールできます。移動した場合は、必要になります。私はそれを反映する答えを更新しました。 – mjsqu

関連する問題