2017-09-24 178 views
1

我想在VBA中構建一個將在R中執行的腳本。我已經能夠通過VBA的shell命令執行R腳本,但在添加參數時無法執行到代碼。VBA到R通過命令提示符殼

以下是我的VBA代碼來執行R:

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 
Dim var1 
Dim var2 
Dim var3 
var1 = Sheets("Command").Range("ticker").Value 
var2 = Sheets("Command").Range("type").Value 
var3 = Sheets("Command").Range("period").Value 
path = "Rscript C:\Documents\RProjects\FA.R " & var1 & " " & var2 & " " & var3 
errorCode = shell.Run(path, style, waitTillComplete) 

以下是我在R中運行代碼:

setwd("C:/Documents/RProjects/WorkingLibrary") 
library(quantmod) 
args = commandArgs(trailingOnly=T) 
var1 = as.character(args[1]) 
var2 = as.character(args[2]) 
var3 = as.character(args[3]) 
x = getFinancials(var1) 
Data = viewFinancials(get(x), type=var2, period=var3) 
write.csv(Data,'TestData.csv') 

我知道這是失敗,因爲CSV文件沒有保存下來,因此沒有數據被R拉取。如果我沒有傳遞任何變量,只需要運行一個R腳本,打印出「Hello World!」。並保存csv,這工作。但是,當我添加可變參數失敗。如果我在R腳本中對變量進行硬編碼,csv就可以工作,因此我知道R代碼是合理的,但是不通過命令行傳遞參數。

我不知道問題出在VBA端還是R端。所有我可以識別是,這個問題是在任一:

1)的參數的通過命令行

2)的說法中的R

3所述接受)兩者的組合。

任何想法?謝謝。

回答

4

我是個白癡。我的路線錯了。此代碼完美工作,並像夢一樣傳遞變量。如果任何人想引用或使用此代碼進行類似的項目,您可以自由地這樣做。只要確保你有正確的文件路徑:P