执行前VBA shell脚本设置环境变量

时间:2015-04-23 19:05:31

标签: python vba shell ipython

我尝试运行一个使用shell脚本运行ipython笔记本(使用runipy)的VBA模块,然后继续做其他事情,但我的ipython笔记本脚本需要输入,这是使用环境变量设置的

这是我到目前为止的VBA:

rundate = Range("b1").Value
shellScript = "runipy C:\argstest.ipynb"

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

Set wshSystemEnv = wsh.Environment("SYSTEM")
wshSystemEnv("CURRWK") = rundate

如果我再跑:

MsgBox (wshSystemEnv("CURRWK"))

结果是正确的:

2015-04-17

但是,如果我继续并执行我的shellcript,它就不会识别这个变量

Set WshShellExec = wsh.exec(shellScript)
Range("a1").Value = WshShellExec.StdErr.ReadAll

告诉我,当python运行时会出现一个关键错误:

KeyError: 'CURRWK'

如果我从命令行中删除VBA并直接运行,我会这样做:

set CURRWK=2015-04-17
runipy C:\Python27\Programs\ipython\ACT\argstest.ipynb

如何在VBA中创建shell以创建新的环境变量,以便python脚本在执行时可以看到它?

谢谢!

1 个答案:

答案 0 :(得分:2)

您是否尝试过SYSTEM代替SET?您的VBA可能无权修改系统级变量。 (“但它可以在设置后再读回来,”你说。是的,但你的脚本可能启用了注册表虚拟化。)过程最接近模拟命令行iconv语句,因为更改仅适用于当前进程和子进程并没有持久化。