2

VBAからいくつかのC#関数(コンパイル済み)を実行するためのオプションについて詳しく説明するために、これを投稿しています。

私はこれまでXLWExcelDNAを試しました。これらの両方を使用すると、Excelセッションから参照して使用できる.xllを作成できます(Excel DNAの方が優れており、簡単です。これもサポートされていますが、XLWは.net 3以降更新されておらず、VS2008または実行する特定のテンプレートを使用した2005)。

私の理解では、XLLはスプレッドシートに統合できず、個別にロードする必要があるため、問題が発生します。

  1. とにかく、ExcelセッションではなくC#でコンパイルされたコードをスプレッドシートに埋め込んで、VBAアドインを「スタンドアロン」/「すぐに使える」ようにする方法はありますか?
  2. それ以外の場合、VBAから実行時にXLLをロードすることは可能ですか?そうするとき、それらは潜在的なリスクですか?
  3. 言及する価値のあるC#/ VBA相互運用​​に関するヒントはありますか?

ありがとうございました !

4

1 に答える 1

1

私が過去に使用した 1 つの解決策は、VSTO 2005 .xls ドキュメントを開発し、それを .xla に変換し、Paul Stubbs によるこのブログ投稿で説明されている手法と同様の手法を使用して、COMVisible .NET への参照を取得することです。コードは VBA から。

私の好ましい解決策は次のとおりです。

  • .NET に実装する COM インターフェイスを IDL で定義し、そこからタイプ ライブラリを構築します。

  • このタイプ ライブラリを .NET プロジェクトにインポートし、必要なインターフェイスを実装する具象クラスを作成します。

  • リンクされたブログ投稿で説明されている手法を使用して、ファクトリ クラス インスタンスを VBA に返します。VBA がこのファクトリ クラス インスタンスを取得すると、それを使用してすべての API を取得できます。

IDL を使用して COM インターフェイスを手動で定義することにより、VBA コードはこれらを参照するだけでよく、COM に表示される .NET アセンブリから生成されたタイプライブラリを参照する必要がなくなり、多くのバージョン管理の問題が回避されます。

于 2012-07-13T15:56:16.920 に答える