我需要从vba调用python脚本,使用shell可以很好地工作。
Sub CallPythonScript()
Call Shell("C:\Program Files (x86)\Python27\python.exe C:\Users\Markus\BrowseDirectory.py")
End Sub但是当我尝试使用wsh时(因为它的等待功能),它就不再工作了。
Sub CallPythonScript()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim myApp As String: myApp = "C:\Program Files (x86)\Python27\python.exe C:\Users\Markus\BrowseDirectory.py"
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
wsh.Run """"" & myApp & """"", windowStyle, waitOnReturn
End Sub然而,我在家里使用了相同的代码,一切都很好,只是路径中没有任何空格。因此,很自然地,空格一定有什么问题。非常感谢您的帮助。
发布于 2016-09-07 04:15:11
除非您使用引号保护目录,否则解释器无法区分包含空格的目录和实参目录。
一种解决方法实际上是一种更好的解决方案,它依赖于这样一个事实: Python将.py扩展与安装的python解释器相关联。
只需执行以下操作(就像启动.bat文件一样):
Dim myApp As String: myApp = "C:\Users\Markus\BrowseDirectory.py"无论python安装在哪里,您的代码都可以正常工作(空格的问题也就消失了)。
这个在excel中的小测试对我很有效,并且运行了我的系统PATH中的pycrust.py
Sub foo()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim myApp As String: myApp = "pycrust.py"
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
wsh.Run myApp, windowStyle, waitOnReturn
End Sub(我不得不简化您的wsh.Run行,因为它不工作,我怀疑您添加的256个引号没有任何好处)
发布于 2016-09-07 03:50:34
你有没有确认路径可以让你直接找到解释器?
尝尝这个,
Dim myApp As String: myApp = "C:\""Program Files (x86)""\Python27\python.exe C:\Users\Markus\BrowseDirectory.py"发布于 2017-07-21 19:05:28
我的脚本在我的工作表和Python上工作(但我将工作表和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)https://stackoverflow.com/questions/39356710
复制相似问题