目次
VBAから.NET Frameworkを利用する方法について調べた。
VBAから 自動生成されたCOM interopアセンブリを介することで
.NET Framewrokの一部のクラスを呼び出すことができる。
ただし、どんなクラスでも呼び出せるわけではない。制限については後述。
COM interopアセンブリは、COMコンポーネントを呼び出す方法と同じようにして利用が可能。
具体的には、CreateObjectやGetObjectを使って呼び出す
COM interopは、既存のCOMコンポーネントを改変することなく、アクセスできるようにするための後方互換性を提供する。
また、COM interopは、COM開発者が、COMオブジェクトにアクセスする方法と同じ要領で、マネージドコードにアクセスすることを可能にする。
具体的な実装の話などは下記Microsoft公式資料を参照。
参考:COM Interop Tutorials (C#)
思いっきり端折ると、COM interopは、マネージドコードをあたかもCOMオブジェクトのように扱えるようにするためのもの。
.NET FrameworkのCOM interopは自動生成される。
なお、上記制限があるため、COM から呼び出し可能な.NET Framework のクラスとメンバは非常に少ない。
というのも、.NET Framework クラス ライブラリのクラスの多くが「引数をとるコンストラクタ」を使用し、
数少ない「引数なしのコンストラクタ」を備えたクラスはパブリック インスタンス (Public Instance) のメンバをほとんど所有しないため。
下記ドキュメントを熟読すると◎。
試行錯誤の過程から、実際に使ってみての感想まで全て詳細にまとめられています。
“.NET Frameworkでできること >> VBAでできること”であり、
VBA側から見ると、.NET Frameworkの多くのクラスが無力化する。
また、VBAから.NET Frameworkに渡せる型がstring と intくらいなので
まともに引数や戻り値のやりとりをすることも難しく、
ただでさえ無力化された.NET Frameworkのクラスがゴミと化す。
MS Officeで、.NET Frameworkの機能を利用したい場合には、
のいずれかがおすすめです。
個人的には、後者(VSTO)であれば、フルに.NET Framework言語(C#)で記述できるため
VisualStudioの生産性の高さや保守性の良さといったメリットを最大限享受できて使い勝手が良いです。
VSTO内のメンバを、VBAから呼び出すことも可能のようです。
参考: チュートリアル : VSTO アドインのコードを VBA から呼び出す