C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#からVBAを実行する。


(過去ログ 83 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■49110 / inTopicNo.1)  C#からVBAを実行する。
  
□投稿者/ あきよ (1回)-(2010/04/22(Thu) 15:52:51)
あきよ さんの Web サイト

分類:[.NET 全般] 

C#で、フォームからワードのVBAマクロを実行し、戻り値を取得したいと思っております。
C#側には、
RunCMacro(oWord, new Object[] { "Project.Module1.WordCount" });

        private void RunCMacro(object oApp, object[] oRunArgs)
        {
            oApp.GetType().InvokeMember("Run",
                    System.Reflection.BindingFlags.Default |
                    System.Reflection.BindingFlags.InvokeMethod,
                    null, oApp, oRunArgs);
        }
ワード側には、
Public Static Function WordCount() As Long
Dim cRes As Long
cRes = ActiveDocument.ComputeStatistics(Statistic:=wdStatisticWords, IncludeFootnotesAndEndnotes:=True)
WordCount = cRes

End Function

としております。
ワード側を戻り値のないマクロを指定した場合などには、問題なく動作しております。

解決方法がありましたら、ご教授下さい。

引用返信 編集キー/
■49112 / inTopicNo.2)  Re[1]: C#からVBAを実行する。
□投稿者/ よねKEN (483回)-(2010/04/22(Thu) 16:53:44)
#ドキュメントの確認のみで、検証はしていません。

No49110 (あきよ さん) に返信
> C#で、フォームからワードのVBAマクロを実行し、戻り値を取得したいと思っております。

まずWordのRunメソッドは戻り値を返すのでしょうか?
WordのVBAのヘルプを読むと戻り値についての説明がありませんでした。
しかし、以下のドキュメントを見るとRunメソッドは戻り値を返す仕様のように読めます。
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.word._application.run(office.11).aspx

Runメソッドは戻り値を返すのかどうかをWordマクロ内でまずは確認されてはいかがでしょうか?


WordのRunメソッドが戻り値を返してくれる前提での話ですが、
InvokeMemberメソッドは戻り値を返しますので、その結果を受ければよいと思います。
戻り値を受けるときは、BindingFlagsの指定にBindingFlags.Instanceも含める必要もあるらしいので、
BindingFlags.Defaultの代わりににこちらを指定するようにすればよさそうです。

引用返信 編集キー/
■49113 / inTopicNo.3)  Re[2]: C#からVBAを実行する。
□投稿者/ 魔界の仮面弁士 (1635回)-(2010/04/22(Thu) 18:40:23)
No49112 (よねKEN さん) に返信
> まずWordのRunメソッドは戻り値を返すのでしょうか?
> WordのVBAのヘルプを読むと戻り値についての説明がありませんでした。

最近のバージョンであれば戻しますよ。

古いバージョン(Word 98 など)だと、戻り値どころか追加の引数さえ無いですが。
引用返信 編集キー/
■49116 / inTopicNo.4)  Re[3]: C#からVBAを実行する。
□投稿者/ よねKEN (484回)-(2010/04/22(Thu) 19:35:10)
No49113 (魔界の仮面弁士 さん) に返信
> ■No49112 (よねKEN さん) に返信
>>まずWordのRunメソッドは戻り値を返すのでしょうか?
>>WordのVBAのヘルプを読むと戻り値についての説明がありませんでした。
>
> 最近のバージョンであれば戻しますよ。

そうでしたか。情報ありがとうございます。
私の確認したヘルプはWord2002のものですが、
戻り値についての記述がありませんでした。

引用返信 編集キー/
■49127 / inTopicNo.5)  Re[4]: C#からVBAを実行する。
□投稿者/ あきよ (2回)-(2010/04/23(Fri) 09:49:50)
あきよ さんの Web サイト
No49116 (よねKEN さん) に返信
> ■No49113 (魔界の仮面弁士 さん) に返信
>>■No49112 (よねKEN さん) に返信
> >>まずWordのRunメソッドは戻り値を返すのでしょうか?
> >>WordのVBAのヘルプを読むと戻り値についての説明がありませんでした。
>>
>>最近のバージョンであれば戻しますよ。
>
> そうでしたか。情報ありがとうございます。
> 私の確認したヘルプはWord2002のものですが、
> 戻り値についての記述がありませんでした。
>

皆様、いろいろとアドバイスをいただき、ありがとうございます。
Runメソッドに関してもう少し自分で調べてみようとおもいます。
その上で分からないことがあれば、またこのスレッドに質問をさせていただきます。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -