Как передать аргумент из Excel / VBA в скрипт в Rstudio - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь открыть скрипт R с помощью Rstudio из VBA, одновременно передавая аргумент скрипту R, к которому я могу затем обратиться с помощью commandArgs ().

Проблема очень похожа на описанную здесь:

WScript.Shell для запуска сценария с пробелами в пути и аргументами из 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 и открывает скрипт. Однако, если я добавляю закомментированный код на 1 строку ниже к переменной (то есть, если я пытаюсь запустить сценарий, одновременно передавая аргумент var1), RStudio открывается, но сценарий этого не делает, и никакое значение не передается на.

Любое предложение будет полезным.

Обратите внимание, что я просмотрел все возможные похожие темы по stackoverflow и в Google, а также пробовал множество комбинаций кавычек и двойных кавычек. (Я не очень опытный в VBA).

Обратите также внимание:

  • Запуск Win7
  • Запуск RStudio 1.1.383 & R 3.4.2
  • Я не хочу использовать cmd или другие инструменты. Это нужно запустить из книги Excel с помощью кнопки, которая ссылается на код vba - так как он будет использоваться новичками.
  • В данный момент я не хочу использовать RScript; Может быть, я буду считать, что после завершения всего кода в RStudio. Но сейчас мне нужно иметь возможность прочитать параметр в RStudio через commandArgs и выполнить некоторые манипуляции.

Пожалуйста, если возможно, предложите свой совет с учетом вышеизложенного.

Надеюсь, все вышесказанное имеет смысл, в противном случае, пожалуйста, попросите разъяснений.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

EDIT:

Проблема в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...