web-dev-qa-db-ja.com

RからVBAスクリプトを実行する

RスクリプトとVBA-codeを含むワークフローを管理する必要があります。プロセスをR(コードの大部分が存在する場所)で実行し、特定の計算のためにVBA-codeをときどき呼び出します。

RでVBAの入力を準備し、結果(.csv、データベース)のどこかに書き込み、その結果を残りのRスクリプトで使用します。

もちろん、コード全体をRに移動するのが最善ですが、現時点では不可能です。 VBA-codeはかなり複雑です。これをRに変換することは、長期的な課題です。

Rでこのようなワークフローを管理する可能性はありますか?

19
ddg
  1. VBAを呼び出すVBscriptラッパーを記述します。参照 コマンドラインまたはバッチファイルからExcelマクロを実行する方法?

  2. Rの system または Shell 関数を使用してVBscriptを実行します。

13
Richie Cotton

VBscriptラッパーを必要としないメソッドを次に示します。 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