当目录名称有空格时,VBA Shell函数无法执行Python脚本

时间:2017-06-29 00:01:05

标签: python excel vba excel-vba shell

我的VBA程序如下,

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在包含VBA代码的工作簿的同一目录中,如下所示,

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脚本。

但是,如果我将文件夹名称Folder 1重命名为Folder1(现在注意目录名称中没有空格),从Excel VBA运行Test()将显示提示窗口,我可以看到“Hello”写在屏幕上一段时间。

在我看来,在VBA中使用Shell函数时,我不能在任何文件夹名称中包含空格。但是真正导致这个错误的是什么?如何修复它以便我可以使用名称有空格的文件夹?

1 个答案:

答案 0 :(得分: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