Solución:
Public Sub RunRTest()
Shell ("Rscript test.r")
End Sub
Tenga en cuenta que tenga cuidado con las ubicaciones de sus archivos y es posible que necesite declaraciones de Shell dim más explícitas … por ejemplo, reemplácelas con estas líneas en su 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)
donde, en Excel una celda con una referencia nombrada RhomeDir
contiene texto
C:Program FilesRR-3.2.3binx64rscript
y
MyRscript
contiene texto C:/Documents/Rworkings/Rscripttest.s
teniendo en cuenta la barra invertida de Unix R y el sufijo .s o .r y VB reemplaza “” con “para dar corchetes dobles en la expresión de la ruta (más corchetes externos adicionales para denotar la cadena) Tampoco es una buena idea tener espacios en el nombre de archivo.
La sintaxis atenuada completa del comando de shell anterior se encontró al buscar el shell de VBA.
Pongo todo en una función que se puede llamar fácilmente. La salida es la salida shell.run, que es un número entero:
Función para ejecutar un script 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
Ejemplos de cómo llamar:
Sub Demo()
Dim iEerrorCode As Integer
iEerrorCode = Run_R_Script("C:Program FilesRR-3.4.4binx64rscript","C:IbosRWF_MetricsAbe.R")
End Sub
O
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