从VBA运行并执行一个python脚本

我试图从我的VBA模块运行一个python脚本。 我已经尝试了几乎所有我在互联网上看到的例子,因此没有运气。 在VBA模块中,我也运行一个.bat文件,并且完美地工作:

batchname = "U:\Backup Bat File.bat" Shell batchname, vbNormalFocus 

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

 Dim Ret_Val Dim args args=Activeworkbook.Path & "\beps_output.py" Ret_Val = Shell("C:\python34\python.exe" & args, vbNormalFocus) 

它不会出错,但没有任何反应。 我对这里的“Ret_Val”(返回值?)做了些什么,以及为什么它没有运行,我有点困惑。

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

 Ret_Val = Shell("C:\python34\python.exe " & args, vbNormalFocus) 

另外,因为Shell是一个函数,它返回一个具有指定参数的值(variablestypes – double),所以返回的值可以包含在一个variables中,这里就像使用Ret_Val指定的那样。 然后,您可以使用此值添加条件逻辑和error handling。

这是在我的电脑上运行(Win 7的X64,python2.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 

如果调用成功, Ret_Val将为非零,即启动的命令的processID。 请注意,该命令将asynchronous运行,即VBA代码将继续快于外部命令将终止。