r - Excel VBA 和 R : batch mode vs interactive mode

标签 r vba excel

我可以使用下面的代码通过 Excel VBA 以批处理模式执行 R,但此方法限制了交互性,因为 R 在脚本完成后关闭。我希望能够根据 Excel 用户输入进一步调用 R,同时利用第一次调用中创建的 R 对象。有没有办法让 R 保持事件状态,同时仍然使用 VBA 向 R 发送消息?

Sub Run_R()

Dim shell As Object, Rcmd As String, retval As Variant

Set shell = VBA.CreateObject("WScript.Shell")
Rcmd = "Rscript C:\test.R"
retval = shell.Run(Rcmd, 0, True)

End Sub

最佳答案

考虑分割这两个进程。让 Excel VBA 通过电子表格或用户窗体获取所有需要的用户输入值,然后将它们传递到 R 脚本中。 R 读取诸如命令行参数之类的值,以进行更长的操作例程。

在这里,R 作为应用程序中的子进程生成,类似于接收输入参数并处理输出的单独宏或函数:

VBA

Sub Run_R()

    Dim shell As Object, Rcmd As String, retval As Variant
    Dim var1, var2 As Double

    var1 = Range("A2").Value
    var2 = Range("A5").Value

    Set shell = VBA.CreateObject("WScript.Shell")
    Rcmd = "Rscript C:\test.R " & var1 & " " & var2
    retval = shell.Run(Rcmd, 0, True)

End Sub

R

args <- commandArgs(trailingOnly=T)

var1 <- args[1]
var2 <- args[2]

# ... run other operations ...

关于r - Excel VBA 和 R : batch mode vs interactive mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299338/

相关文章:

r - 如何在 R Studio 中绘制具有 13 个节点的二叉树

r - 如何在R中绘制一年中的日出?

r - data.table:j 中的匿名函数

html - 如何提取向下滚动时进一步加载的完整表格?

vba - 从 Access 发送电子邮件

excel - 关闭 Powerpoint 的屏幕更新

r - 每个时间步的平均值

vba - 从 Excel 2010 升级到 2013 时的问题

excel - 出现消息框后清除VBA Excel文本框

c# - Excel VBA 项目没有关闭