我正在尝试使用VBA中的Rstudio打开R脚本,同时将参数传递给R脚本,然后可以使用commandArgs()进行访问。
问题与此处描述的问题非常相似:
WScript.Shell to run a script with spaces in path and arguments from VBA
但是,该解决方案虽然非常好,但似乎对我不起作用。
这是我正在使用的VBA代码:
Sub RunRscript()
ActiveWorkbook.Save
Dim shell As Object
waitTillComplete As Boolean, _
style As Integer, _
errorcode As Integer, _
path As String, _
var1 As String
Set shell = VBA.CreateObject("WScript.Shell")
waitTillComplete = True
style = 1
var1 = Range("F3").Value
path = Chr(34) & "C:\Program Files\RStudio\bin\rstudio.exe" & Chr(34) & " " &
Chr(34) & "C:\Users\LI\Downloads\starting_code_v3.R"
'& Chr(34) & " " & Chr(34) & "var1" & Chr(34)
errorcode = shell.Run(path, style, waitTillComplete)
End Sub
如您所见,我使用的代码与上面提供的链接几乎相同,但有一些附加功能。即,我将var1定义为单元格F3的内容(在我的情况下,该单元格包含文件的路径,但我想它可以是任何东西)。
现在,如果我运行上面显示的代码,则它将运行并启动RStudio并打开脚本。但是,如果我将下面注释掉的第一行代码添加到变量中(即,如果我尝试同时传递参数var1来启动脚本),则RStudio会打开,但脚本不会打开,也不会传递任何值上。
任何建议都会有所帮助。
请注意,我已经查看了关于stackoverflow和google的所有可能的相似主题,以及尝试使用引号和双引号组合的负载。 (我不太精通VBA。
请注意:
请考虑以上因素,提出您的建议。
我希望以上所有内容都是有道理的,否则请进行澄清。
谢谢。
答案 0 :(得分:2)
编辑:
问题出在RStudio,而不是您的代码。 RStudio不接受命令行参数:
旧答案:
我看到的问题是您将文本“ var1”放入路径而不是变量var1的内容中。我用堆叠的引号替换了您的Chr(34),因为对我来说更容易跟踪。抱歉,如果您觉得这不太可读。我测试了字符串,它确实将Var1的内容作为命令行参数提供。
尝试一下:
Option Explicit
Public Sub RunRscript()
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 = ActiveSheet.Range("F3").Value
path = """C:\Program Files\RStudio\bin\rstudio.exe"" ""C:\Users\LI\Downloads\starting_code_v3.R"" """ & var1 & """"
errorcode = shell.Run(path, style, waitTillComplete)
End Sub