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
语句,因为更改仅针对当前进程和子进程,而不是坚持了。
我正在尝试 运行 一个使用 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
语句,因为更改仅针对当前进程和子进程,而不是坚持了。