从VBA运行并执行python脚本

Emm*_*maV 5 python excel vba batch-file excel-vba

我正在尝试从VBA模块运行python脚本。我已经尝试了几乎所有在互联网上看到的示例,因此没有运气。在VBA模块中,我还运行一个.bat文件,它可以完美运行:

batchname = "U:\Backup Bat File.bat"

Shell batchname, vbNormalFocus
Run Code Online (Sandbox Code Playgroud)

接下来,我需要运行python脚本,该脚本与excel文件位于同一文件夹中。现在,我正在尝试:

Dim Ret_Val

Dim args

args=Activeworkbook.Path & "\beps_output.py"

Ret_Val = Shell("C:\python34\python.exe" & args, vbNormalFocus)
Run Code Online (Sandbox Code Playgroud)

它不会出错,但是什么也没发生。我对“ Ret_Val”(返回值?)在这里做什么以及为什么不运行感到困惑。

use*_*274 6

这是在我的 PC 上运行的(Win 7 x64,python 2.7.9):

Sub runpython()
    Dim Ret_Val
    Dim args As String

    args = "W:\programming\python\other_py\sqrt.py"
    Ret_Val = Shell("C:\Program Files (x86)\python27\python.exe" & " " & args, vbNormalFocus)
    If Ret_Val = 0 Then
       MsgBox "Couldn't run python script!", vbOKOnly
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

Ret_Val如果调用成功,则为非零,即启动命令的 processID。请注意,该命令将异步运行,即 VBA 代码将比外部命令终止的速度更快。


Par*_*ait 4

尝试在 exe 程序和文件之间添加空格:

Ret_Val = Shell("C:\python34\python.exe " & args, vbNormalFocus)
Run Code Online (Sandbox Code Playgroud)

另外,由于Shell是一个返回带有指定参数的值(变体类型 - double)的函数,因此返回值可以包含在变量中,如您在此处使用 Ret_Val 指定的那样。然后,您可以使用该值添加条件逻辑和错误处理。