Проблема запуска Rscript в Excel 2013 через оболочку - PullRequest
0 голосов
/ 14 октября 2019

Я успешно выполняю свой скрипт 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, указав ту же проблему, но решения, которые там были, мне не помогли. Например, я уже использую двойные кавычки и пытаюсь от них избавиться.

Есть идеи?

1 Ответ

0 голосов
/ 14 октября 2019

Рассмотрим более чистую сборку вызова командной строки 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
...