在 Windows 7 (64位) 和 Office 2010 中的 Word VBA 宏中,我正在使用
无论如何,
Shell
调用 java 来执行一个 .jar 文件。这段代码是分发的一部分,据说在 Office 2007 中可以工作(我没有该版本)。ShellCommand = "java -classpath ..."
TaskID = Shell(ShellCommand, ShellWindowState)
无论如何,
Shell
命令返回一个进程ID,但是该进程立即终止且没有Err.Number
。 我实际上无法获得有关原因的详细信息。
然而,我怀疑它找不到java
命令。 我通过手动打开CMD.exe
窗口并运行打印出的ShellCommand
(使用Debug.Print
)来验证我的PATH是否正确。 的确,我的PATH变量设置为指向安装最新JRE的位置,这也可以通过键入java-version
并查看正确输出来证明。
因此,仍然不信任VBA中的Shell
,我将ShellCommand硬编码如下:
ShellCommand = "c:\Program Files\Java\jdk1.7.0_72\jre\bin\java -classpath ..."
令我惊讶的是,Shell 命令起作用了,我的 .jar 文件也按照预期执行了。
那么,谁能告诉我为什么系统中的 PATH
变量在 ShellCommand
中被忽略了呢?或者更好的方法是,我如何编写 VBA 程序,以便在 Windows 7 上更新 JRE (每隔几周就会出现一个移动目标的 java.exe
),它就能找到 java.exe
?
Environ("PATH")
来获取它。http://msdn.microsoft.com/en-us/library/office/gg264486(v=office.15).aspx - RubberDuckCreateObject("WScript.Shell").Exec("CMD /C " & ShellCommand).StdOut.ReadAll
来检索您的shell命令的输出。此外,我认为VBA在扩展变量时不像CMD那样添加所需的引号,因此如果您的路径包含空格,例如“..\Program Files\”,则需要手动添加额外的引号,例如:Shell("""" & Environ("PATH") & """" & ShellCommand, ShellWindowState)
希望这有意义... - SierraOscar