【问题标题】:VBA shell script set environment variable before executionVBA shell脚本在执行前设置环境变量
【发布时间】:2015-04-23 19:05:31
【问题描述】:

我正在尝试运行一个 VBA 模块,该模块使用 shell 脚本运行 ipython 笔记本(使用 runipy),然后再继续执行其他操作,但我的 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

但是,如果我继续执行我的 shellscript,它就无法识别这个变量

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 脚本在执行时可以看到它?

谢谢!

【问题讨论】:

    标签: python vba shell ipython


    【解决方案1】:

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

    【讨论】:

    • 轰隆隆!非常感谢,它做到了。
    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 2021-06-17
    • 2013-02-06
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多