Как скопировать / вставить скрипт из Excel / VBA в Rstudio - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь скопировать сценарий R из «Столбца 1» в Excel, вставить его в файл Rstudio «test2.R» и затем запустить этот код. Я пытаюсь сделать это с помощью VBA. Вот что у меня сейчас:

Public Sub RunRCode()
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 = Worksheets("Planilha2").Columns(1).Copy
 path = """C:\RWindows\R-3.5.1\bin\Rscript.exe"" ""C:\Users\j042409\Desktop\test2.R"" """ & var1 & """"
errorcode = shell.Run(path, style, waitTillComplete)
End Sub

этот код VBA может открывать окна cmd, но кажется, что он не может вставить код из «Столбца 1» в RStudio. Есть мысли?

Ответы [ 2 ]

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

Я получил это, используя этот код ниже!

Public Sub RunRCode()
ActiveWorkbook.Save
Dim shell As Object: Set shell = VBA.CreateObject("WScript.Shell")
Dim errorcode As Long
Dim path As String: path = "C:\RWindows\R-3.5.1\bin\Rscript.exe " & saveTempScript
errorcode = shell.Run(path, 1, True)
Kill saveTempScript

End Sub


Public Function saveTempScript() As String

Dim filePath    As String
Dim i           As Integer
Dim ws          As Worksheet: Set ws = ThisWorkbook.Sheets(Planilha2.Name)
filePath = "C:\Users\" & VBA.Environ("USERNAME") & "\Desktop\test3.r"

Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fileStream As TextStream

Set fileStream = fso.CreateTextFile(filePath)

For i = 1 To ws.Cells(ws.Cells.Rows.Count, "A").End(xlUp).Row
    fileStream.WriteLine ws.Cells(i, 1).Value2
Next i

fileStream.Close

If Not fso.FileExists(filePath) Then
    MsgBox "Arquivo não criado"
    saveTempScript = vbNullString
    GoTo try
Else
    saveTempScript = filePath
End If


try:
Set fileStream = Nothing
Set fso = Nothing

End Function
0 голосов
/ 15 октября 2019

Попробуйте следующий код в соответствии с моим комментарием:

Sub RunRCode()
Dim fso As Object, ts As Object, shell As Object
Dim Rng As Range, path As String, exepath As String, errorcode As Long

'Creating R file from Excel
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = CreateObject("Scripting.TextStream")

path = "Path to file\filename.R"
Set ts = fso.CreateTextFile(path, True)

For Each Rng In Worksheets("Planilha2").UsedRange.Columns(1).Rows
If Not IsEmpty(Rng.Value) Then ts.WriteLine Rng.Value
Next

ts.Close

'Running R script
Set shell = VBA.CreateObject("WScript.Shell")
exepath = "path to Rscript.exe"
errorcode = shell.Run(exepath & " " & path, 1, True)

If errorcode <> 0 Then MsgBox "Error code: " & errorcode, vbCritical
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...