在没有RExcel的情况下从Excel VBA运行R.

时间:2013-10-03 22:27:19

标签: r excel vba excel-vba

这个过程可以简化吗?

首先,我在R:中手动打开此文件 C:\ r \ ExampleModel \ ModelScript.R

从R-Editor,当从打开的ModelScript.R文件运行下面的代码时,它会正确处理Model.R脚本。

source("C:\\R\\ExampleModel\\Model.R", echo=T)

在Excel中,我想运行上面的源代码而无需先从R手动打开ModelScript.R。我可以在下面的VBA代码中修改什么来自动处理Excel / VBA中的source()命令吗?如果批处理是唯一的选择,如果没有Rexcel,请使用提供的示例扩展。

Excel 2007 VBA代码:

Sub RRUN()

    Dim rCommand As String
    rCommand = "C:\\Program Files\\R\\R-3.0.0\\bin\\Rscript.exe --verbose C:\\R\\ExampleModel\\ModelScript.R"

    'Timer Set to run full Model.R script
    Application.Wait Now + TimeValue("00:00:05")

    'Runs R Script and Arguements into process
    Shell rCommand, vbNormalFocus

    'Timer Set to run full Model.R Script
    Application.Wait Now + TimeValue("00:00:05")

End Sub

注意:我尝试使用R.exe代替上面的Rscript.exe,但没有结果。

2 个答案:

答案 0 :(得分:3)

您可能需要查看Visual Studio Tools for Office。对于Excel 2007,VSTO链接为here

这是Excel中的example R(使用VTSO代码编写)。请查看标题为“其他应用程序”的部分。这是来自同一个人的另一个example。我不知道他们是否出售这些应用程序,或者是否所有内容都是定制的。

这是另一种可能的solution。我没有采用这种方法,因为我的应用程序有非常具体的要求。

我的观点是,即使您可以使用VBA将某些内容组合在一起,但看起来有更好的方案。

答案 1 :(得分:1)

以下似乎有效:

确保rscript.exe位于系统路径

确保path = statement中的引号可用于文件名。我把它完全保留为我现在运行的那个而不是使它通用(更令人困惑)。

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 = "rscript ""C:\Users\Charles\SkyDrive\Documents\Development\G4H\Technical evaluation templates\Graphical analysis.R"""
errorCode = shell.Run(path, style, waitTillComplete)

End Sub

使用来自http://shashiasrblog.blogspot.co.uk/2013/10/vba-front-end-for-r.html的代码和MrFlick的建议将它们组合在一起。从我所看到的,它也应该是非常通用的。