gpt4 book ai didi

python - 使用 wsh 从 vba 调用 python 脚本

转载 作者:行者123 更新时间:2023-11-28 16:22:20 24 4
gpt4 key购买 nike

我需要从 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

但是,我在家里使用相同的代码,一切正常,不同之处在于路径中没有任何空白。那么空白自然就一定有问题。非常感谢帮助。

最佳答案

解释器不可能区分包含空格的目录和真正的参数,除非你用引号保护目录。

一种实际上是更好的解决方案的变通方法依赖于 Python 将 .py 扩展名与已安装的 python 解释器相关联这一事实。

只需执行此操作(就像启动 .bat 文件一样):

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

无论 python 安装在哪里,您的代码都可以正常工作(并且空格问题消失)

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

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 个引号没有任何用处)

关于python - 使用 wsh 从 vba 调用 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com