3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

.Net(C#)アプリからExcelのVBAを呼び出したい(事前バインディング)

.NetアプリケーションからExcel2007のVBA(マクロ)標準モジュール内のサブプロシージャを呼び出す方法です。

まず、参照設定で、COMの Microsoft Excel 12.0 Object Library を追加します。

(12.0とかはExcelのバージョンで変わってきます。)

そして、下記のようなコードを書きます。(C#)

using Microsoft.Office.Interop.Excel;

 

//Excelマクロファイルパス

string strMacroPath = @"D:\test.xls";

 

//Excel操作用オブジェクト生成

ApplicationClass oExcel = new ApplicationClass();

//表示する

oExcel.Visible = true;

Workbooks oBooks = oExcel.Workbooks;

//Excelファイル開く

Workbook oBook = oBooks.Open(strMacroPath);

 

//マクロ実行(Testというサブプロシージャを動かす)

oExcel.Run("Test");

 

//終了処理(リソース解放)

oBook.Close(false);

System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);

oBook = null;

 

System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);

oBooks = null;

 

oExcel.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);

oExcel = null;

簡単ですね。といってもほぼ参考先まるままですが。。

しかし、この方法ではExcel2007が入っているPCでしか実行できません。

例えばExcel2003が入っているPCとかだと、エラーとなります。

ということで、どのバージョンでのExcelでも実行できる方法は次の記事で書きます。

参考:

全ては時の中に… : 【VB.NET】VB.NETからExcelのVBA(マクロ)を実行する