Запуск R скриптов из VBA
Как мне запустить скрипт R из VBA? Скажем, у меня есть скрипт R, который хранится как C:\XXX\testR.R
Я пытался использовать Shell, но не совсем успешно.
2 ответа
Обратите внимание, что будьте осторожны с расположением ваших файлов и, возможно, понадобятся более явные операторы Shell dim.... например, замените эти строки в вашем VB
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 = """" & Cells.Range("RhomeDir") & """ """ & Cells.Range("MyRscript") & """"
errorCode = shell.Run(path, style, waitTillComplete)
где в Excel ячейка с именованной ссылкой RhomeDir содержит текст
C:\Program Files\R\R-3.2.3\bin\x64\rscript и
MyRscript содержит текст "C:/Documents/Rworkings/Rscripttest.s"
отмечая обратную косую черту Unix R и.s или.r postfix и VB заменяет "" на ", чтобы указать двойные скобки в выражении пути (плюс дополнительные внешние скобки для обозначения строки). Также не рекомендуется вставлять пробелы в имени файла.
Полный синтаксис dim указанной выше команды оболочки был найден при поиске оболочки VBA.
Я помещаю все в функцию, которую можно легко вызвать. Выходные данные представляют собой выходные данные shell.run, которые являются целыми числами:
Функция для запуска скрипта R:
Function Run_R_Script(sRApplicationPath As String, _
sRFilePath As String, _
Optional iStyle As Integer = 1, _
Optional bWaitTillComplete As Boolean = True) As Integer
Dim sPath As String
Dim shell As Object
'Define shell object
Set shell = VBA.CreateObject("WScript.Shell")
'Wrap the R path with double quotations
sPath = """" & sRApplicationPath & """"
sPath = sPath & " "
sPath = sPath & sRFilePath
Run_R_Script = shell.Run(sPath, iStyle, bWaitTillComplete)
End Function
Примеры как звонить:
Sub Demo()
Dim iEerrorCode As Integer
iEerrorCode = Run_R_Script("C:\Program Files\R\R-3.4.4\bin\x64\rscript","C:\Ibos\R\WF_Metrics\Abe.R")
End Sub
ИЛИ ЖЕ
Sub Demo()
Dim iEerrorCode As Integer
Dim WS as WorkSheet
Set WS=ThisWorkBook.Worksheets("Sheet1")
iEerrorCode = Run_R_Script(WS.Range("A1"),WS.Range("A2")) 'cell A1=adderess of R application and cell A2 is the address of your R file, one can use a named range too
End Sub