用wsh从vba调用python脚本

2024-04-20 11:08:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从vba调用一个python脚本,它可以很好地使用shell。在

Sub CallPythonScript()

        Call Shell("C:\Program Files (x86)\Python27\python.exe C:\Users\Markus\BrowseDirectory.py")

End Sub

但是当我尝试使用wsh(因为wait函数)时,它就不再工作了。在

^{pr2}$

然而,我在家里使用了相同的代码,一切都很好,不同的是路径中没有任何空白。所以很自然,空白处肯定有问题。非常感谢帮助。在


Tags: 脚本filesshellcallvbaprogramexeusers
3条回答

除非用引号保护目录,否则解释器无法区分包含空格的目录和实际参数。在

一个解决方案(实际上是一个更好的解决方案)依赖于Python将.py扩展与已安装的Python解释器相关联的事实。在

只需这样做(就像启动.bat文件一样):

Dim myApp As String: myApp = "C:\Users\Markus\BrowseDirectory.py"

不管python安装在哪里,你的代码都能工作(空格的问题也消失了)

excel中的这个小测试对我很有用,运行了pycrust.py,它正好在我的系统PATH

^{pr2}$

(我不得不简化您的wsh.Run行,因为它不起作用,我怀疑您添加的256个引号没有任何好处)

我的脚本可以在我的sheet和Python上运行(但是我将sheet和py脚本放在同一个文件夹中):

Path = ActiveWorkbook.Path
Pth = """" & Path & "\pythonscript_name.py" & """"
Ph = """" & "C:\Python27\python.exe " & Pth & """"

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
ErrorCode = wsh.Run(Ph, windowStyle, waitOnReturn)

你有没有确认路径直接把你带到解释器那里?在

试试这个

Dim myApp As String: myApp = "C:\""Program Files (x86)""\Python27\python.exe C:\Users\Markus\BrowseDirectory.py"

相关问题 更多 >