首页 > 解决方案 > 为什么VBA代码打开R文件而不是运行代码

问题描述

我在 excel 中有一个调用 R 代码的 VBA 宏。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 文件实际运行而不是仅打开。

标签: rexcelvba

解决方案


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

基本上将...通过 windows 命令提示符运行该段中给出的任何内容。这相当于运行批处理或 powershell 脚本。(按开始,输入 cmd 并通过命令提示符运行代码)

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

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

C:\Program Files\R\R-3.5.1\bin

大多数情况下,这是通过为此目录创建一个环境变量来完成的,此时您可以通过

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

有关如何设置此路径的参考,请在此处查看 java 的出色指南:如何设置或更改 PATH 系统变量?

假设您想避免这种情况,您可以通过直接引用“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)

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


推荐阅读