我在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文件实际运行而不是仅打开。
答案 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)
在这种情况下,双引号似乎是必需的。