- - PR -
[C# VSTO2005] C#からVBAマクロメソッドを呼び出す
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-04 14:13
#からMacro Module内のpublicメソッドを呼び出して返り値を受け取ることはできますか?
メソッド例 Public Module Module1 Public Static Function Add(ByVal a As Double, ByVal b As Double) As Double Return a + b End Function End Module End Module | ||||||||||||
|
投稿日時: 2006-10-04 14:33
Application.Run メソッドで実現できるでしょう。(戻り値は System.Object) VSTO とはいえ、Microsoft.Office.Interop.Excel.Application を使うことになると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-10-04 19:24
回答ありがとうございます。
色々試しましたがC#側からマクロのModule1.Addにたどり着く方法が分かりませんでした。 C#側 // 色々やったうちの一つ Excel.Application app; int ans = (int)app.Run(this.Application.Modules["Module1"].Add(1, 2)); マクロ側 Public Module Module1 Public Function Add(ByVal a As Double, ByVal b As Double) As Double Return a + b End Function End Module | ||||||||||||
|
投稿日時: 2006-10-04 20:45
app のインスタンスが生成されていないようですが... それと、Run メソッドにわけのわからないものを渡していますね。 引数が何を示すのか、調べた方が良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-10-05 09:53
回答ありがとうございます。
Application.Runの説明を読みましたが、引数の指定方法が理解できませんでした。 ExcelのModuleに含まれるメソッド(サンプルではModule1.Add())を呼び出したいのですが、 Application.RunからModule1.Addを実行するにはどうすれば良いのでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-10-05 10:16
モジュール内の関数であれば、関数名を文字列で渡すだけです。 残りの引数は、その関数に渡すべき引数を示します。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-10-05 19:20
Application.Run以前にそもそもC#からModule1が見えていない状態です。
C#から参照するマクロを作成したいのですが、作成の仕方が間違っているのでしょうか? GlobalsからはSheetNは見えますが、Module1は見えません。 Application.Run(Module1.Add,1.23,4.56)とやってもModule1が存在しないエラーが出ます。 よろしくお願いします。 ------------------------------- マクロの作成手順 VS2005IDEのSheet1上でマクロの自動記録で空のMacro1を作成する。 Funciton Addを追加する。 マクロエクスプローラで、マクロ→MyMacros→Module1が見えている状態になる。 以下Module1の内容 Option Explicit On Option Strict On Imports System Imports EnvDTE Imports EnvDTE80 Imports System.Diagnostics Public Module Module1 Public Function Add(ByVal a As Double, ByVal b As Double) As Double Add = a + b End Function End Module | ||||||||||||
|
投稿日時: 2006-10-05 19:30
C# から見える見えないの問題ではないと思います。
"参照" ではなく、実行して戻り値を得たいというご質問だったと思います。
伝わっていないようですので、同じことを書かせて頂きます。 > モジュール内の関数であれば、関数名を文字列で渡すだけです。 > 残りの引数は、その関数に渡すべき引数を示します。 ちなみに、調べるというプロセスを踏むならば、過去ログに '解答' があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |