2015-05-29 39 views
3

我想從我的VBA模塊運行一個python腳本。我已經嘗試了幾乎所有我在互聯網上看到的例子,因此沒有運氣。 在VBA模塊我也運行.bat文件,它完美的作品:從VBA運行並執行一個python腳本

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」(返回值?)做了些什麼,以及爲什麼它沒有運行,我有點困惑。

+1

exe和args之間不應該有空格嗎?像'Ret_Val = Shell(「C:\ python34 \ python.exe」&args,vbNormalFocus)' –

+2

可能重複[如何在Excel VBA上調用python腳本?](http://stackoverflow.com/questions/18135551/如何調用-python-script-on-excel-vba) –

回答

1

嘗試增加EXE程序和文件之間的空間:

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

另外,由於Shell是返回值(變體類型 - 雙)的函數的與指定的參數,則返回的值可以被包含在一個變量,這裏就像你用Ret_Val指定的那樣。然後您可以使用此值添加條件邏輯和錯誤處理。

1

這是我的個人電腦(Win 7的64位,蟒蛇2.7.9)上運行:如果調用成功,推出命令即的ProcessID

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將是非零。請注意,該命令將異步運行,即VBA代碼將繼續快於外部命令終止。

+1

如果調用成功,「Ret_Val」將不爲零。因此你的代碼應該是:'如果Ret_Val = 0那麼' – Axel

+0

@Axel:謝謝你發現這個。尷尬。 – user1016274