Excel VBA和R:批处理模式与交互模式

时间:2016-09-02 19:15:07

标签: r vba excel-vba excel

我可以通过Excel VBA使用下面的代码以批处理模式执行R,但是这种方法限制了交互性,因为R在脚本完成后关闭。我希望能够在使用第一次调用中创建的R对象的同时,基于Excel用户输入进一步调用R。有没有办法在仍然使用VBA向R发送消息时保持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

1 个答案:

答案 0 :(得分:2)

考虑分割这两个过程。让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 ...