- - PR -
VB2005からマクロ(EXCEL2003)呼出時の戻り値
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-27 22:41
現在VB2005からExcel2003のマクロを呼び出していますが、
戻り値の取得方法が分からなく調べています。 マクロが実行できることは確認しています。 戻り値はそもそも取得できるのでしょうか? 現在行っているやり方ではNULLしか取れません。 行っている処理は以下の通りです。 ■VB側■ Dim oExcel As New Excel.ApplicationClass() Dim oBook As Excel.WorkbookClass Dim filePath As String = "参照XLSファイルパス" Dim oBooks As Excel.Workbooks = oExcel.Workbooks oExcel.Visible = False oBook = oBooks.Open(filePath) 'ここで戻り値を取得したいです。 Dim ans As String = CType(oExcel.Run("'" & oBook.Name & "'!ThisWorkbook.DoKbTestWithParameter", "テスト"), String) 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 ■EXCE側■ Public Function DoKbTestWithParameter(sMsg As String) MsgBox sMsg DoKbTestWithParameter = "VBA関数戻り値" End Function ご教授お願いします。 | ||||||||
|
投稿日時: 2007-09-27 23:16
PIA 使ってるんですよね? Excel.Run() の戻り値の型は何になってます? | ||||||||
|
投稿日時: 2007-09-28 09:36
返信ありがとうございます。
引用: -------------------------------------------------------------------------------- PIA 使ってるんですよね? -------------------------------------------------------------------------------- すいません。PIA調べてみたのですが意味が良く分かりません。 「OfficeのAPIを使う」という感じでしょうか? 引用: -------------------------------------------------------------------------------- Excel.Run() の戻り値の型は何になってます? -------------------------------------------------------------------------------- 戻り値はオブジェクト型になっています。 | ||||||||
|
投稿日時: 2007-09-28 09:38
まず、VBA 側のプロシージャの戻り値の型を設定してください。 ついでに VB8 側では TryCast ステートメントを使うようにしましょう。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-09-28 09:42
検索すればすぐにヒットしますが、念のため貼っておきます。Office と相互運用するにおいて最低限知っておかねば致命傷になるものがいくつかあります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-09-28 11:00
返信ありがとうございます。
引用: -------------------------------------------------------------------------------- まず、VBA 側のプロシージャの戻り値の型を設定してください。 ついでに VB8 側では TryCast ステートメントを使うようにしましょう。 -------------------------------------------------------------------------------- 確かに。以下の通りに変更しました。 ■VB側■ Dim ans As String = TryCast(oExcel.Run("'" & oBook.Name & "'!ThisWorkbook.DoKbTestWithParameter", "テスト"), String) ■EXCE側■ Public Function DoKbTestWithParameter(sMsg As String) As String MsgBox sMsg DoKbTestWithParameter = "VBA関数戻り値" End Function PIAの参考リンクありがとうございました。勉強しておきます。 現在の状況なのですが、以前と変わらない状況です。 戻り値が必ずNULLしか取得できません。 昨日に引き続き今日も色々調べているのですが、中々参考サイトなどがヒットしません。。 | ||||||||
|
投稿日時: 2007-09-28 11:26
サンプルどおりの単純なメソッドであれば間違いなく取れるハズです。 やり方は合っているので参考サイトなどは不要ですよ。 ただ疑問に思うところはあります。 先ほど Object 型だと言っていたのは何でしょうか? 先ほどの実装例では VBA は Variant 型になりますので私は VB8 側のことだと捉えました。 Nothing には型などありませんから Object 型だという時点で何らかのインスタンスが返されているということになります。
VBA 側のコードは確実に実行されているのであれば、上記のようなコードで確認できると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-10-01 20:02
返信ありがとうございます。
引用: -------------------------------------------------------------------------------- Object 型だと言っていたのは何でしょうか? -------------------------------------------------------------------------------- oExcelオブジェクトのRunメソッドの戻り値がObject型だったので、Object型ではないかと。。 以前私は: -------------------------------------------------------------------------------- 現在行っているやり方ではNULLしか取れません。 -------------------------------------------------------------------------------- と書いていましたが、正しくはNothingでした。申し訳ありませんでした。 現在の状況ですが、やはり戻り値が取得できない状況です。 戻り値が取得できた方がいたら、サンプルコードを見せて頂きたいと思います。 よろしくお願いします。 |