Excel VBA(マクロ) を実行する方法
C#あるいはVB.NETのプログラム側から、Excel VBA のメソッドを実行する方法を調べました。
Excel以外にもAccessでも同じようにVBAのメソッドを呼び出せると思います。
前提条件
- マクロ側でメソッドを実行できるようにセキュリティを設定します。
- マクロを実行するため、実行環境にExcelがインストールされている必要があります。
- プロジェクトの参照設定で、COMの Microsoft Excel xx.x Object Libraryを追加(xxはバージョン)
C:\work\macro\work.xlsmファイルに、標準モジュール内にTestメソッド、
Sheet1にSheetTestメソッドを作成しそれを呼び出します。
C#の場合
public static void CallMacro()
{
// Excel.Application の新しいインスタンスを生成する
var xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks xlBooks;
// xlApplication から WorkBooks を取得する
// 既存の Excel ブックを開く
xlBooks = xlApp.Workbooks;
xlBooks.Open(@"C:\work\macro\work.xlsm");
// Excel を表示する
xlApp.Visible = true;
// マクロを実行する
// 標準モジュール内のTestメソッドに "Hello World" を引数で渡し実行
xlApp.Run("work.xlsm!Test", "Hello World");
// Sheet1内のSheetTestメソッドを実行(引数なし)
xlApp.Run("work.xlsm!Sheet1.SheetTest");
// Excel を終了する
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
}
VB.NETの場合
Public Sub CallMacro()
' Excel.Application の新しいインスタンスを生成する
Dim xlApp As New Excel.Application()
Dim xlBooks As Excel.Workbooks
' xlApplication から WorkBooks を取得する
' 既存の Excel ブックを開く
xlBooks = xlApp.Workbooks
xlBooks.Open("C:\work\macro\work.xlsm")
' Excel を表示する
xlApp.Visible = True
' マクロを実行する
' 標準モジュール内のTestメソッドに "Hello World" を引数で渡し実行
xlApp.Run("work.xlsm!Test", "Hello World")
' Sheet1内のSheetTestメソッドを実行(引数なし)
xlApp.Run("work.xlsm!Sheet1.SheetTest")
' Excel を終了する
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
End Sub
まとめ
動作の確認はExcel2010で行いました。
上記例はわかりやすくするために例外処理などを省いていますが、実際に使うにはその辺りの処理をしっかりとしてやる必要があります。
Functionを呼び出し、戻り値を受け取ることも可能です。
コメントを書く