web-dev-qa-db-fra.com

Exécutez le script VBA à partir de R

Je dois gérer un workflow impliquant des scripts R et VBA-code. Je voudrais exécuter le processus en R (où se trouve la majeure partie de mon code) et de temps en temps appeler VBA-code pour un calcul spécifique.

Je préparerais les entrées pour VBA dans R, j'écrirais quelque part les résultats (.csv, base de données), puis j'utiliserais les résultats dans le reste du R-script.

Le mieux serait bien sûr de déplacer tout le code en R mais ce n'est pour l'instant pas possible. Le VBA-code est assez complexe. Traduire cela en R sera une tâche difficile à long terme.

Y a-t-il une possibilité de gérer dans R un tel flux de travail?

19
ddg
  1. Écrivez un wrapper VBscript qui appelle votre VBA. Voir Manière d'exécuter des macros Excel à partir de la ligne de commande ou d'un fichier batch?

  2. Exécutez votre VBscript via les fonctions R ( system ou Shell ).

13
Richie Cotton

Voici une méthode qui ne nécessite pas de wrapper VBscript. Vous devrez installer le package RDCOMClient

library(RDCOMClient)

# Open a specific workbook in Excel:
xlApp <- COMCreate("Excel.Application")
xlWbk <- xlApp$Workbooks()$Open("C:\\Temp\\macro_template.xlsm")

# this line of code might be necessary if you want to see your spreadsheet:
xlApp[['Visible']] <- TRUE 

# Run the macro called "MyMacro":
xlApp$Run("MyMacro")

# Close the workbook and quit the app:
xlWbk$Close(FALSE)
xlApp$Quit()

# Release resources:
rm(xlWbk, xlApp)
gc()
11
lebelinoz