トップ回答者
[VSTO]VBAを使用せずにVSTOソリューションの呼び出しは可能なのか?

質問
-
VSTOのフォーラムが無かったようなのでこちらで質問させていただきます。
[環境]
Visual Studio 2010 Professional
.NET Framework 4.0
Excel 2010
VSTOで作成したExcelブックAから、同じくVSTOで作成したExcelブックBのメソッドを呼び出したいのですが可能でしょうか?
VBAを利用する場合はブックAからブックBのVBA呼び出し→ブックBのVBAよりブックBにVSTOで作成したメソッド呼び出し
で可能と判断しました。
[参考サイト]
http://blogs.msdn.com/b/saikik/archive/2008/08/29/vba-vsto-vba-vsto.aspx
http://blogs.msdn.com/b/saikik/archive/2008/08/30/vba-vsto-vsto-vba.aspx
ただ、セキュリティ等の運用を考えるとマクロブックを使用せずに連携できるならそれに越したことはありません。
VBA無しで実現することは可能なのでしょうか。
ご存知の方がいましたらご教授頂けると幸いです。
回答
-
ご質問のブックAとブックBが、それぞれドキュメントレベルのVSTOカスタマイズであると仮定すると、MSDNライブラリの 「ドキュメント レベルのカスタマイズのアーキテクチャ」 に次の通り説明があります。
----------
複数のドキュメント レベルのカスタマイズを同時に開くと、各アセンブリは異なるアプリケーション ドメインに読み込まれます。 このため、1 つのソリューションが正しく動作しない場合でも、それが原因で他のソリューションにエラーが発生することはありません。 ドキュメント レベルのカスタマイズは、1 つのアプリケーション ドメイン内の 1 つのドキュメントと連携するように設計されています。 ドキュメント間のやり取りに対応するようには設計されていません。
----------アプリケーションドメインが異なるため、ブックBの.NETメソッドをブックAから直接呼び出すことはできません。このような場合、(例えば、ブックBのVSTOソリューションでWCFエンドポイントを作成し、ブックAから接続するといった)何らかのプロセス間通信の手法で対応できると思います。
ただし「ドキュメント間のやり取りに対応するようには設計されていません。」とも明記されていますので、プロセス間通信により何か副作用が生じたとしても、自己責任ということになると思います。この点はご留意下さい。
ご参考になれば幸いです。
- 回答としてマーク morisoba01 2014年11月10日 12:32
すべての返信
-
ご質問のブックAとブックBが、それぞれドキュメントレベルのVSTOカスタマイズであると仮定すると、MSDNライブラリの 「ドキュメント レベルのカスタマイズのアーキテクチャ」 に次の通り説明があります。
----------
複数のドキュメント レベルのカスタマイズを同時に開くと、各アセンブリは異なるアプリケーション ドメインに読み込まれます。 このため、1 つのソリューションが正しく動作しない場合でも、それが原因で他のソリューションにエラーが発生することはありません。 ドキュメント レベルのカスタマイズは、1 つのアプリケーション ドメイン内の 1 つのドキュメントと連携するように設計されています。 ドキュメント間のやり取りに対応するようには設計されていません。
----------アプリケーションドメインが異なるため、ブックBの.NETメソッドをブックAから直接呼び出すことはできません。このような場合、(例えば、ブックBのVSTOソリューションでWCFエンドポイントを作成し、ブックAから接続するといった)何らかのプロセス間通信の手法で対応できると思います。
ただし「ドキュメント間のやり取りに対応するようには設計されていません。」とも明記されていますので、プロセス間通信により何か副作用が生じたとしても、自己責任ということになると思います。この点はご留意下さい。
ご参考になれば幸いです。
- 回答としてマーク morisoba01 2014年11月10日 12:32