2017-09-24 7 views
1

J'essaie de créer un script dans VBA qui sera exécuté dans R. J'ai déjà été capable d'exécuter des scripts R via la commande shell de VBA, mais je n'ai pas pu le faire lorsque j'ai ajouté des arguments au code.Invite de commandes VBA à R via Shell

Ce qui suit est mon code VBA pour exécuter 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) 

Voici le code que je suis en cours d'exécution en 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') 

Je sais que cela échoue parce que le fichier csv ne sauve pas vers le bas , donc il n'y a pas de données tirées par R. Si je ne passe pas de variables et juste excel exécuter un script R qui imprime dire, "Bonjour tout le monde!" et enregistre le CSV, cela fonctionne. Mais quand j'ajoute les arguments variables cela échoue. Si je code dur les variables dans le script R, le csv fonctionnera, donc je sais que le code R est sain, mais ne reprend pas les arguments quand il est passé par la ligne de commande.

Je ne sais pas si le problème est sur l'extrémité VBA ou l'extrémité R. Tout ce que je peux identifier est que le problème est soit:

1) le passage des arguments de ligne de commande

2) l'acceptation de l'argument dans R

3) une combinaison des deux .

Des idées? Merci.

Répondre

4

Je suis un idiot. J'ai eu un mauvais chemin. Ce code fonctionne parfaitement et passe les variables comme un rêve. Si quelqu'un souhaite référencer ou utiliser ce code pour un projet similaire, vous êtes libre de le faire. Assurez-vous de disposer du bon chemin de fichier: P