Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在运行Excel之前,动态设置环境变量的正确方法是什么?_Windows_Excel_Ms Office - Fatal编程技术网

Windows 在运行Excel之前,动态设置环境变量的正确方法是什么?

Windows 在运行Excel之前,动态设置环境变量的正确方法是什么?,windows,excel,ms-office,Windows,Excel,Ms Office,我有一堆Excel加载项,它们是由环境变量配置的。通常,这些是在整个系统的基础上在注册表中设置的。当我想非动态更改值时,我会转到: my-computer -> properties -> advanced -> environment variables -> System variables 我已经验证过,当我在这里设置环境变量时,Excel似乎会像我们预期的那样提取它 但是,我还需要动态设置环境变量,例如,使我的Excel加载项使用替代配置文件。我希望能够做到以下

我有一堆Excel加载项,它们是由环境变量配置的。通常,这些是在整个系统的基础上在注册表中设置的。当我想非动态更改值时,我会转到:

my-computer -> properties -> advanced -> environment variables -> System variables
我已经验证过,当我在这里设置环境变量时,Excel似乎会像我们预期的那样提取它

但是,我还需要动态设置环境变量,例如,使我的Excel加载项使用替代配置文件。我希望能够做到以下几点:

set MYADDIN_CONFIG_FILE=path_to_config.xml
<path to excel>\excel.exe
将MYADDIN\u CONFIG\u FILE=path\u设置为\u CONFIG.xml
\excel.exe
不幸的是,当我这样做时,就好像完全忽略了对环境变量的更改。我猜Excel需要被告知,是否注意到从命令行设置的环境变量

我已经使用VB“Env”函数验证了上述技术失败

仅供参考:WindowsXP32bit上的Excel2003。

我做了一个简单的测试(WindowsXPPro SP3上的Excel2003SP2)

我编写了一个VBA函数:

Public Function GetEnv(name As String) As String
  GetEnv = Environ(name)
End Function
然后我键入:

=GetEnv("TEMP")
=GetEnv("JAVA_HOME")
=GetEnv("TestSO")
如果未定义后者,单元格将保持为空

现在,我转到命令行并键入:

set TestSO=This is a test for SO
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
然后我加载上一页。嗯,结果是不变的,即使在点击F9之后,但如果我点击公式并点击返回,结果会更新。。。(我对Excel/VBA的使用有点生疏…

无论如何,在运行Excel之前,它会在当前控制台中动态显示正确的环境变量集。正如预期的那样(常见的Windows行为)。

环境又称shell又称命名空间的概念有点难以解释,甚至难以理解。可以说这是意料之中的事。在SO中所做的更改只会影响在您制作它的shell中运行的程序,以及在新shell中运行的程序,除非您主动传播它。不确定如何在windows上完成此操作。启动时,将重新创建所有shell,并且所有人都可以看到更改。