如何将参数从Excel / VBA传递到Rstudio中的脚本

时间:2018-07-02 15:47:03

标签: r vba rstudio

我正在尝试使用VBA中的Rstudio打开R脚本,同时将参数传递给R脚本,然后可以使用commandArgs()进行访问。

问题与此处描述的问题非常相似:

WScript.Shell to run a script with spaces in path and arguments from VBA

但是,该解决方案虽然非常好,但似乎对我不起作用。

这是我正在使用的VBA代码:

Sub RunRscript()

    ActiveWorkbook.Save

    Dim shell               As Object
        waitTillComplete    As Boolean, _ 
        style               As Integer, _ 
        errorcode           As Integer, _ 
        path                As String, _ 
        var1                As String

    Set shell = VBA.CreateObject("WScript.Shell")
    waitTillComplete = True
    style = 1
    var1 = Range("F3").Value
    path = Chr(34) & "C:\Program Files\RStudio\bin\rstudio.exe" & Chr(34) & " " & 
    Chr(34) & "C:\Users\LI\Downloads\starting_code_v3.R"
    '& Chr(34) & " " & Chr(34) & "var1" & Chr(34)

    errorcode = shell.Run(path, style, waitTillComplete)

End Sub

如您所见,我使用的代码与上面提供的链接几乎相同,但有一些附加功能。即,我将var1定义为单元格F3的内容(在我的情况下,该单元格包含文件的路径,但我想它可以是任何东西)。

现在,如果我运行上面显示的代码,则它将运行并启动RStudio并打开脚本。但是,如果我将下面注释掉的第一行代码添加到变量中(即,如果我尝试同时传递参数var1来启动脚本),则RStudio会打开,但脚本不会打开,也不会传递任何值上。

任何建议都会有所帮助。

请注意,我已经查看了关于stackoverflow和google的所有可能的相似主题,以及尝试使用引号和双引号组合的负载。 (我不太精通VBA。

请注意:

  • 运行Win7
  • 运行RStudio 1.1.383和R 3.4.2
  • 我不想使用cmd或其他工具。这需要从excel工作簿中通过链接到vba代码的按钮来运行-它将由完整的新手使用。
  • 我现在不想使用RScript;也许我会在完成RStudio中的所有代码后考虑一下。但是现在,我需要能够通过commandArgs在RStudio中读取参数并进行一些操作。

请考虑以上因素,提出您的建议。

我希望以上所有内容都是有道理的,否则请进行澄清。

谢谢。

1 个答案:

答案 0 :(得分:2)

编辑:

问题出在RStudio,而不是您的代码。 RStudio不接受命令行参数:

https://support.rstudio.com/hc/en-us/community/posts/200659066-Accessing-command-line-options-in-RStudio

旧答案:

我看到的问题是您将文本“ var1”放入路径而不是变量var1的内容中。我用堆叠的引号替换了您的Chr(34),因为对我来说更容易跟踪。抱歉,如果您觉得这不太可读。我测试了字符串,它确实将Var1的内容作为命令行参数提供。

尝试一下:

Option Explicit

Public Sub RunRscript()
    ActiveWorkbook.Save
    Dim shell As Object
    Set shell = VBA.CreateObject("WScript.Shell")
    Dim waitTillComplete As Boolean: waitTillComplete = True
    Dim style As Long: style = 1
    Dim errorcode As Long
    Dim path As String
    Dim var1 As String
    var1 = ActiveSheet.Range("F3").Value
    path = """C:\Program Files\RStudio\bin\rstudio.exe"" ""C:\Users\LI\Downloads\starting_code_v3.R"" """ & var1 & """"

    errorcode = shell.Run(path, style, waitTillComplete)
End Sub