r - 为什么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 文件实际运行而不是仅打开。
解决方案
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)
在这种情况下,双引号似乎是必要的。
推荐阅读
- apache-spark - 如何在现有 dataFrame Spark 中添加第 5 列
- elm - 通过反向代理运行 elm reactor:如何向 _elm 的链接添加 url 前缀?
- python - Deleting elements in list of list using list comprehensions(Python)
- php - 使用 PHP 根据 timezoneid 获取正确的时间
- mysql - 在同一个表中显示子关系和父关系(如果有)
- django - 如何在 Django 中将 id 作为参数传递给视图?
- javascript - 如何在屏幕底部的页脚中获取并显示从我的 JSON 到达的总对象?
- python - 数据框熊猫如何批量添加新列并将进度保存到文件或pickle
- c# - 如何使用 c# 在 windows iot 中使用 USB 电缆作为串行端口将 arduino uno 连接到 rasberry pi 3
- reactjs - Axios .get 请求奇怪的行为