Проблема с запуском Rscript в Excel 2013 через оболочку

Я уже давно успешно запускаю свой r-скрипт в Excel 2010 и Windows 7, используя vba. Затем мне пришлось использовать другой компьютер, на котором установлены Excel 2013 и Windows 8. Это дает мне следующую ошибку:

Не удалось выполнить метод «Выполнить» объекта «IWshShell3»

Это код, который работает в Excel 2010:

Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 0
Dim errorCode As Integer
Dim var1 As String
Dim PATH As String

var1 = Replace(Replace(ThisWorkbook.PATH, "\", "/") & "/", " ", "_z9z_")

PATH = "C:\PROGRA~1\R_App\bin\x64\RScript """ & "C:\JF\Code A\dvlp.R"" " & var1 & " " & 2500

errorCode = shell.Run(PATH, style, waitTillComplete)

Этот же код не работает на другом компьютере, о котором я упоминал.

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

Любые идеи?


person janf    schedule 14.10.2019    source источник


Ответы (1)


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

Sub Run_R_Script()
On Error Goto ErrHandle
    Dim shell As Object
    Dim waitTillComplete As Boolean: waitTillComplete = True
    Dim style As Integer: style = 0
    Dim errorCode As Integer

    Dim args(0 To 3) As String
    Dim rCommand As String
    Dim i As Integer

    args(0) = "C:\PROGRA~1\R_App\bin\x64\RScript"
    'args(0) = "Rscript.exe"                          ' IF R BIN FOLDER IN PATH ENV VARIABLE
    args(1) = "C:\JF\Code A\dvlp.R"
    args(2) = Replace(Replace(ThisWorkbook.PATH, "\", "/") & "/", " ", "_z9z_")
    args(3) = 2500

    rCommand = args(0)
    For i = 1 To UBound(args)
        rCommand = rCommand & " """ & args(i) & """"
    Next i        
    Debug.Print rCommand                              ' CHECK COMMAND LINE CALL

    Set shell = VBA.CreateObject("WScript.Shell")
    errorCode = shell.Run(rCommand, style, waitTillComplete)

ExitHandle:
    Set shell = Nothing                               ' RELEASE ALL set OBJECTS
    Exit Sub

ErrHandle:
    MsgBox Err.Number & " - " & Err.Description, vbCritical
    Resume ExitHandle
End Sub
person Parfait    schedule 14.10.2019
comment
В чем ошибка выше обработчика ошибок? Укажите конкретный номер ошибки. Кроме того, можете ли вы настроить воспроизводимый пример пример сценария, который принимает ваши два аргумента (т. е. путь и номер)? Я не вижу твоего ThisWorkbook.PATH. Кроме того, опубликуйте команду Debug.Print, включенную в решение. - person Parfait; 14.10.2019