从VBA调用Python脚本

时间:2018-06-11 20:26:53

标签: python vba excel-vba excel

我在Excel中从vba调用python脚本时遇到问题。我阅读了解决同一问题的其他线程,但是当我运行代码时,Python屏幕闪烁然后消失。仅供参考,我为Windows 10下载了python 3.6.5并将其添加到PATH。有人能告诉我为什么屏幕闪烁以及我能做些什么来解决它?感谢

Sub Run_python()

Dim Ret_Val
Dim args As String

args = "C:\Users\opera\AppData\Local\Programs\Python\Python36\Tools\scripts\db2pickle.py"
Ret_Val = Shell("C:\Users\opera\AppData\Local\Programs\Python\Python36\python.exe" & " " & args, vbNormalFocus)

If Ret_Val = 0 Then
MsgBox "Couldn't run python script!", vbOKOnly
End If

End Sub

2 个答案:

答案 0 :(得分:0)

屏幕闪烁并快速返回,因为程序失败或快速完成

您是否尝试从命令行运行它以查看发生了什么?

如果运行正常,您可以强制命令窗口保持打开状态,以便您可以阅读从Shell命令使用python时发生的情况

Call Shell("cmd.exe /S /K" & "C:\Users\opera\AppData\Local\Programs\Python\Python36\python.exe" & " " & args, vbNormalFocus)

/S      Modifies the treatment of string after /C or /K 
/C      Carries out the command specified by string and then terminates 
/K      Carries out the command specified by string but remains 

答案 1 :(得分:0)

我按照建议尝试了以下方法:

SELECT 
"All Accounts" as adAccount,
(SELECT SUM(spend)
    FROM facebookReports
    WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 1 DAY)
    ) as spend_today,
(SELECT SUM(spend)
    FROM facebookReports
    WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 3 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY)
    ) as spend_yesterday,
(SELECT SUM(revenue)
    FROM facebookReports
  WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 1 DAY)
    ) as rev_today,
(SELECT SUM(revenue)
    FROM facebookReports
    WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 3 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY)
    ) as rev_yesterday,
(SELECT  ROUND(SUM(revenue)/SUM(spend),2)
    FROM facebookReports
    WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 1 DAY)
    ) as roas_today,
(SELECT ROUND(SUM(revenue)/SUM(spend),2)
    FROM facebookReports
    WHERE date BETWEEN DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 3 DAY) AND DATE_SUB(CONVERT_TZ(NOW(),@@session.time_zone,'US/Pacific'),INTERVAL 2 DAY)
    ) as roas_yesterday

运行脚本后,命令窗口刚刚闪烁。 因此,我只是在我的python脚本的最后一行添加了input('Press any key to exit')语句,现在该窗口保持不变。