【发布时间】:2018-07-24 23:11:53
【问题描述】:
如果我在命令行中运行命令Rscript "C:/TEMP/test.R",它会起作用,并且我的脚本会按预期运行。一旦我尝试在我的 VBA 代码中运行它,它就不会将 Rscript 识别为有效命令。
Dim shell_obj As Object
Set shell_obj = VBA.CreateObject("WScript.Shell")
Dim errorCode As Integer
errorCode = shell_obj.Run("Rscript ""C:/TEMP/test.R""", 1, True)
当我查看 WScript.Shell 使用的 PATH 变量时,我发现它不包含内部带有 Rscript 路径的系统变量。
Dim shell_obj As Object
Dim wshSystemEnv As Object
Set shell_obj = VBA.CreateObject("WScript.Shell")
' This one does not include the path to the Rscript'
Debug.Print shell_obj.ExpandEnvironmentStrings("%PATH%")
Set wshSystemEnv = shell_obj.Environment("SYSTEM")
' This one includes the path to the Rscript'
Debug.Print wshSystemEnv("PATH")
我可以强制 WScript.Shell 对象使用系统环境吗?或者至少使用它的变量?
VBA(版本 1):
VBA(第 2 版):
【问题讨论】:
-
在 VBA 中,只需使用
Environ("path")。不需要 WScript 或 RScript。 -
所以你的问题是系统没有自动检查
rscript.exe所在的路径,对吗?你知道那个fie的正确位置是什么吗? (您确定了,我们可以将其添加到现有路径中。) -
我在我的电脑里知道。但是代码可能会在其他人的机器上使用不同版本的 R(这会改变路径)。因此,放置修复路径并不能解决问题。
-
您没有提到涉及其他计算机。我现在很困惑:您的问题说您可以从命令提示符运行它,但不能从 VBA 运行它。第一步是让它在你的上面运行,即使路径现在是硬编码的。 您的计算机上的
rscript.exe位于何处?一旦你在你的机器上运行了这个,我们就可以担心其他人...... -
根据我所做的研究,该文件的路径差异很大,因为
R包没有“标准”安装位置。我可以帮助编写代码以编程方式定位文件,但在脚本在 your 具有 known 路径的机器上正常运行之前,我不会打扰。