VB.NETを使って、ExcelやWord等のOffice製品と連携することが多々ある。
このような場合で、VBA(マクロ)をVB.NETから実行したいことがある。
その方法について説明する。
以下、サンプル。
このような場合で、VBA(マクロ)をVB.NETから実行したいことがある。
その方法について説明する。
以下、サンプル。
《準備》
・参照設定を追加する。
→COMコンポーネントのMicrosoft Excel xx.x Object Libraryを追加する。
・Imports文でMicrosoft.Office.Interop.Excelを宣言する。
《コード》
上記のコードの他に、Cドライブの直下に"Test.xls"を作成する必要がある。このExcelファイルには、VBAの標準モジュールを追加し、以下の名前を持つ関数を作成する必要がある。処理内容はどのようなものでも構わないが、メッセージボックスを表示させると動作していることが確認し易い。
・Test
・TestWithParameter(strParam As String)
【補足事項】
・他のOffice製品(Word, PowerPoint, Access)のVBAも似たような方法で実行可能。
1.対象とする製品の参照設定を追加する
2.対応するクラスをImportsする。
Accessの場合 … Microsoft.Office.Interop.Access
Wordの場合 … Microsoft.Office.Interop.Word
PowerPointの場合 … Microsoft.Office.Interop.PowerPoint
3.製品に対応するオブジェクトをデータ型として使用する。
・Runメソッドの第1引数が、実行する関数名、第2引数がパラメータとなっている。
・参照設定を追加する。
→COMコンポーネントのMicrosoft Excel xx.x Object Libraryを追加する。
・Imports文でMicrosoft.Office.Interop.Excelを宣言する。
《コード》
'[参照設定の追加]-[COM]タブから
'Microsoft Excel xx.x Object Libraryを選択する必要あり。
Imports Excel = Microsoft.Office.Interop.Excel
Private Sub Main()
Dim oExcel As Excel.ApplicationClass
Dim oBook As Excel.WorkbookClass
Dim oBooks As Excel.Workbooks
Dim strPath As String
'C:\Test.xlsを実行ファイルに指定する。
strPath = "C:\Test.xls"
'Excelオブジェクトの作成
oExcel = New Excel.Application
'oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBooks = oExcel.Workbooks
'Excelファイルを開く
oBook = oBooks.Open(strPath)
'マクロを実行する
oExcel.Run("Test")
oExcel.Run("TestWithParameter", "Hello from VB .NET Client")
'後処理
oBook.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
oBook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
oBooks = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
oExcel = Nothing
End Sub
上記のコードの他に、Cドライブの直下に"Test.xls"を作成する必要がある。このExcelファイルには、VBAの標準モジュールを追加し、以下の名前を持つ関数を作成する必要がある。処理内容はどのようなものでも構わないが、メッセージボックスを表示させると動作していることが確認し易い。
・Test
・TestWithParameter(strParam As String)
【補足事項】
・他のOffice製品(Word, PowerPoint, Access)のVBAも似たような方法で実行可能。
1.対象とする製品の参照設定を追加する
2.対応するクラスをImportsする。
Accessの場合 … Microsoft.Office.Interop.Access
Wordの場合 … Microsoft.Office.Interop.Word
PowerPointの場合 … Microsoft.Office.Interop.PowerPoint
3.製品に対応するオブジェクトをデータ型として使用する。
・Runメソッドの第1引数が、実行する関数名、第2引数がパラメータとなっている。
- カテゴリ:
- VB.NET
- VBA(MS-Office)