为什么VBA代码打开R文件而不是运行代码

时间:2018-10-26 16:55:55

标签: r excel vba

我在excel中有一个VBA宏,它调用R代码。 VBA按钮仅打开R文件,而不同时运行代码。这是代码:

Sub RunRscript()
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
Dim path As String
path = "C:\Users\user\Documents\Forecast.R"
errorCode = shell.Run(path, style, waitTillComplete)
End Sub

一旦运行,R代码最终将创建一个新的excel文档。我希望按钮运行R代码并创建此新文档。如果我只是单独运行R代码,则可以正常运行。我想知道我需要在此代码中添加什么,以便R文件实际运行而不是仅打开。

1 个答案:

答案 0 :(得分:0)

VBA.CreateObject("WScript.Shell").run(...)

基本上将通过Windows命令提示符运行...段中给出的内容。这等效于运行批处理或Powershell脚本。 (按开始,在命令提示符下键入cmd并运行代码)

默认情况下,每种类型的文档都有一些默认的打开方式。文件夹,文件等通常在某些查看器中打开。将目录赋予R文件将执行与双击该目录相同的操作。

为了将其作为脚本运行,您将需要通过R的可执行文件Rscript.exe打开它。默认目录在

中给出
C:\Program Files\R\R-3.5.1\bin

通常,这是通过在此目录中创建环境变量来完成的,此时您可以通过以下方式运行rscript

path = "Rscript [fullpath to R file] [Arguments]"
VBA.CreateObject("WScript.Shell").run(path)

有关如何设置此路径的参考,请在此处查看Java的出色指南:How do I set or change the PATH system variable?

假设您要避免这种情况,只需直接引用“ rscript”可执行文件的完整路径即可运行脚本

path = """C:\Program Files\R\R-3.5.1\bin\Rscript.exe"" ""C:\Users\user\Documents\Forecast.R"""
VBA.CreateObject("WScript.Shell").run(path)

在这种情况下,双引号似乎是必需的。