我尝试运行一个使用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脚本在执行时可以看到它?
谢谢!
答案 0 :(得分:2)
您是否尝试过SYSTEM
代替SET
?您的VBA可能无权修改系统级变量。 (“但它可以在设置后再读回来,”你说。是的,但你的脚本可能启用了注册表虚拟化。)过程最接近模拟命令行iconv
语句,因为更改仅适用于当前进程和子进程并没有持久化。