以前の記事でExcel VBAの実行方法について説明したが、内容が不十分だったので、その続きを…
前回は、単純に実行するだけで戻り値を返さないSubステートメントの説明であったので、今回は、戻り値を返すFunctionステートメントの利用方法について説明する。
ExcelファイルにVBAを記述する方法は、以前の記事を参照のこと。
前回は、単純に実行するだけで戻り値を返さないSubステートメントの説明であったので、今回は、戻り値を返すFunctionステートメントの利用方法について説明する。
ExcelファイルにVBAを記述する方法は、以前の記事を参照のこと。
【Functionステートメントの利用手順】
1.Excelファイルを作成する。
2.Excel VBAでFunctionステートメントを作成し、戻り値の型を決定する。
3.2で作成したFunctionステートメントの戻り値に合う変数を宣言する。
例)VBA側の戻り値がVariant型の場合、VB.NETではObject型を用意する。
4.Excel.ApplicationクラスのRunメソッドを実行する箇所で、以下を記述する。
変数 = オブジェクト.Run("Functionステートメント名", "引数")
5.変数内の値を確認する。
以下、サンプル。
【VB.NET】
【Excel VBA】
【補足事項】
・サポートオンライン「Visual Basic .NET からオートメーションを使用して Office マクロを実行する方法」を参照
・VB.NET側から実行できるVBAは、標準モジュール内に記述されたものに限定される。
→ThisWorkBookや各シートに記述したマクロを実行すると、以下のエラーメッセージが表示される。
マクロ''ブック名.xls'!シート名.関数名'を実行できません。このブックで
マクロが使用できないか、またはすべてのマクロが無効になっている
可能性があります。
1.Excelファイルを作成する。
2.Excel VBAでFunctionステートメントを作成し、戻り値の型を決定する。
3.2で作成したFunctionステートメントの戻り値に合う変数を宣言する。
例)VBA側の戻り値がVariant型の場合、VB.NETではObject型を用意する。
4.Excel.ApplicationクラスのRunメソッドを実行する箇所で、以下を記述する。
変数 = オブジェクト.Run("Functionステートメント名", "引数")
5.変数内の値を確認する。
以下、サンプル。
【VB.NET】
'[参照設定の追加]-[COM]タブから
'Microsoft Excel xx.0 Object Libraryを選択する必要あり。
Imports Excel = Microsoft.Office.Interop.Excel
Private Sub ExecButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ExecButton.Click
Try
Dim oExcel As New Excel.ApplicationClass
Dim oBook As Excel.WorkbookClass
Dim oBooks As Excel.Workbooks = oExcel.Workbooks
Dim strPath As String
Dim Result As String
'C:\Test.xlsを実行ファイルに指定する。
strPath = "C:\Test.xls"
'Excelオブジェクトの設定
oExcel.Visible = False
oBook = oBooks.Open(strPath)
'マクロを実行する
'Subステートメントを実行する場合
'oExcel.Run("'" & oBook.Name & "'!Test")
'oExcel.Run("'" & oBook.Name & "'!TestWithParameter", "Hello from VB .NET Client")
'Functionステートメントを実行する場合
Result = _
DirectCast(oExcel.Run("'" & oBook.Name & _
"'!TestReturnParameter"), String)
MessageBox.Show(Result, "TestReturnParameter", _
MessageBoxButtons.OK)
Result = _
DirectCast(oExcel.Run("'" & oBook.Name & _
"'!TestParameter", "Test!"), String)
MessageBox.Show(Result, "TestParameter", MessageBoxButtons.OK)
'Result = DirectCast(oExcel.Run("'" & oBook.Name & _
' "'!ThisWorkBook.TestParameter", "Test!"), String)
'MessageBox.Show(Result, "TestParameter", MessageBoxButtons.OK)
'後処理
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
Catch ex As Exception
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK)
End Try
End Sub
【Excel VBA】
'引数は受け取らず、値を返すのみ
Public Function TestReturnParameter() As String
TestReturnParameter = "TestReturnParameter " & Application.Name
End Function
'引数を受け取り、その値を返す
Public Function TestParameter(sMsg As String) As String
TestParameter = sMsg
End Function
【補足事項】
・サポートオンライン「Visual Basic .NET からオートメーションを使用して Office マクロを実行する方法」を参照
・VB.NET側から実行できるVBAは、標準モジュール内に記述されたものに限定される。
→ThisWorkBookや各シートに記述したマクロを実行すると、以下のエラーメッセージが表示される。
マクロ''ブック名.xls'!シート名.関数名'を実行できません。このブックで
マクロが使用できないか、またはすべてのマクロが無効になっている
可能性があります。
- カテゴリ:
- VB.NET
- VBA(MS-Office)