2

这个过程可以简化吗?

首先,我在 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,但没有结果。

4

2 回答 2

3

您可能想查看Visual Studio Tools for Office。对于 Excel 2007,VSTO 链接在此处

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

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

我的观点是,即使你可以使用 VBA 将一些东西放在一起,看起来还有更好的方案。

于 2013-10-17T17:24:50.200 回答
1

以下似乎有效:

确保 rscript.exe 在您的系统路径中

确保 path= 语句中的反逗号适用于文件名。我将它完全保留为我现在运行的那个,而不是让它通用(并且更令人困惑)。

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 的建议放在一起的。从我所见,它也应该是相当通用的。

于 2014-06-05T16:49:43.360 回答