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

VBA shell script set environment variable before execution

我正在尝试 运行 一个使用 shell 脚本的 VBA 模块到 运行 一个 ipython 笔记本(使用 运行ipy) 在继续做其他事情之前,但是我的 ipython notebook 脚本需要输入,这些输入是使用环境变量设置的。

这是我目前的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

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

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

告诉我,当 python 运行s 它得到一个关键错误:

KeyError: 'CURRWK'

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

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

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

谢谢!

您是否尝试过 Process 而不是 SYSTEM?您的 VBA 可能没有修改系统级变量的权限。 ("But it can read it back after setting it," 你说。是的,但你的脚本可能启用了注册表虚拟化。)进程最接近地模拟命令行 SET 语句,因为更改仅针对当前进程和子进程,而不是坚持了。