.NET TIPS VBAで独自の.NETライブラリを使うには?[VB]デジタルアドバンテージ 一色 政彦2011/08/04 |
![]() |
|
Microsoft Office製品(WordやExcelなど)に独自の処理を追加する方法としては、主に下記の3種類がある。
- VBA(Visual Basic for Applications)マクロ
- Office COM(Component Object Model)アドイン
- Visual Studio Tools for Office(VSTO)
このうち、最も手軽に作成できるのが、VBAマクロであるが、このVBAマクロでも、.NET Frameworkで作成した独自のクラスを活用できる。本稿ではその方法を紹介する。
●VBA向けの.NETライブラリの作成
最初に、VBA向けに.NETのクラス・ライブラリを作成しよう。
管理者としてVisual StudioのIDEを立ち上げ、メニューバーから[ファイル]-[新規作成]-[プロジェクト]を実行すると表示される[新しいプロジェクト]ダイアログで、左側のツリーから[Visual Basic]-[Windows]を選択して、右側のテンプレート一覧で「クラス ライブラリ」を選択し、[名前]欄に適当な名前(例:「ClassLibraryForVBA」)を入力して、[OK]ボタンをクリックする。これにより、クラス・ライブラリのひな型が作成される。
[ソリューション エクスプロラー]に「Class1.vb」ファイルが作成されているので、今回は、このファイルの「Class1」クラスを「WebPage」クラスに変更する。まずは、ファイル名を「WebPage.vb」に変更する。
そして、それらのファイルの内容を下記のコードに書き換える。
|
|
VBA向けの.NETライブラリに含まれるクラスのサンプル・コード(WebPage.vb) | |
※このコードで使われているWebClient.DownloadStringメソッドは、.NET Framework 2.0以降でのみ利用できる。 |
このコードに記述されたWebPageクラスは、GetTextメソッド(=引数としてURLアドレスを受け取り、戻り値としてWebページのHTMLコード・データを返すメソッド)を実装したシンプルなクラスである。
上部にある3つのフィールド変数が重要である。これらは、VBAマクロのコードから、COM経由でWebPageクラスにアクセスしてもらうために必要となる。それぞれに一意で独自のGUIDが必要である。
独自のGUIDは、メニューバーから[ツール]-[GUID の作成]を実行すると表示される[GUID の作成]ダイアログで生成できる(次の画面を参照)。
![]() |
[GUID の作成]ダイアログを使った新しいGUIDの作成 |
このダイアログで[新規 GUID]ボタンをクリックして、新しいGUIDを生成する。[GUID 形式]としては[4. レジストリ形式 {xxxxxxx-xxxx ... xxxx}]ラジオボタンを選択したうえで[コピー]ボタンをクリックする。そして、先ほどのコードの「<独自GUID>」の部分にペーストする。「{D12ADC7D-B8F8-441F-9C66-4542507FDB21}」のような文字列が貼り付けられるので、前後の「{」と「}」は削除する。これを3箇所の「<独自GUID>」部分に対して行う。その結果、例えば次のようなコードになる。
|
|
独自のGUIDを指定した3つのコード箇所(WebPage.vb) |
以上でVBA向けの.NETライブラリの実装は完了である。
次に、このクラス・ライブラリ(=.dllファイル)がCOMとして使えるように設定する。具体的には、[ソリューション エクスプロラー]内のプロジェクト項目の右クリック・メニューから[プロパティ]を実行してプロジェクト・プロパティを開き、そこで[コンパイル]タブを開き(※Visual Studio 2005以降の場合。Visual Studio 2003以前では[構成プロパティ]-[ビルド]を選択し)、[COM 相互運用機能の登録]チェックボックスにチェックを入れる。次の画面は、その例である。
![]() |
[COM 相互運用機能の登録]の設定 |
最後にソリューション全体をビルドして.dllファイルを作成しよう。ここでは、「ClassLibraryForVBA.dll」ファイル(ClassLibraryForVBAアセンブリ)が作成される。
●VBAでの.NETライブラリの利用
それでは、先ほど作成した.NETのクラス・ライブラリ(=.dllファイル)をVBAコードから呼び出してみよう。
Microsoft Wordを起動したら、ショートカット・キー[Alt]+[F11]を押してVisual Basic Editorを起動し、[プロジェクト]ウィンドウ内の[Normal]-[標準モジュール]を選択した状態で、メニューバーから[挿入]-[標準モジュール]を実行する。
![]() |
VBAマクロの標準モジュールの作成 |
これにより、[プロジェクト]ウィンドウ内の[Normal]-[標準モジュール]配下に、「Module1」という名前の項目が作成される。この名前を変更しておこう。[プロパティ]ウィンドウ内の[(オブジェクト名)]欄の「Module1」を「UsingDotNetModule」に変更する。
次に、.NETのクラス・ライブラリ(=ClassLibraryForVBA.dllファイル)への参照を追加する。具体的には、メニューバーから[ツール]-[参照設定]を実行すると表示される[参照設定]ダイアログで、次の画面のように[参照可能なライブラリ ファイル]一覧から[ClassLibraryForVBA]項目のチェックボックスにチェックを入れて[OK]ボタンをクリックする。
![]() |
.NETクラス・ライブラリへの参照の追加 |
さらに、[プロジェクト]ウィンドウで「UsingDotNetModule」標準モジュール項目をダブルクリックして、コード・エディタを開き、下記のコードを記述する。
|
|
.NETライブラリに含まれるクラスを利用するVBAマクロのサンプル・コード(「UsingDotNetModule」標準モジュール) |
以上で、.NETライブラリを利用するVBAマクロは完成である。
このまま、「GetPageHtml」という名前の通常のVBAマクロとして利用できるが、その前にいったんテストしておこう。コード・エディタで「Sub GetPageHtml()」上に文字入力カーソル(=キャレット)を置いた状態で[F5]キーを実行する。これによりVBAマクロが実行され、次の画面のようにWordドキュメントに「http://www.google.co.jp」のWebページのHTMLコードがWordドキュメント内に出力される。
![]() |
.NETクラス・ライブラリを利用するVBAマクロのテスト |
VBAマクロとして実運用する際には、Visual Basic Editorを閉じて、Microsoft Word上でショートカット・キー[Alt]+[F8]を押して[マクロ]ダイアログを表示し、そこで次の画面のように[マクロ名]一覧から適切なマクロ(この例では「GetPageHtml」)を選択して[実行]ボタンをクリックすればよい。
![]() |
.NETクラス・ライブラリを利用するVBAマクロの通常実行 |
■
以上の手順で、.NET Framework開発技術を生かしたVBAマクロを作成できる。
なお、独自の.NETライブラリはCOMとしてレジストリに登録する必要があるので、このライブラリを開発時のPC以外で使う場合には、
regasm ClassLibraryForVBA.dll /tlb:ClassLibraryForVBA.tlb
というコマンドラインを実行しなければならない。この.tlbファイルは.dllファイルとともに生成されている。
カテゴリ:クラス・ライブラリ 処理対象:COMコンポーネント 使用ライブラリ:ComClass属性(Microsoft.VisualBasic名前空間) |
|
![]() |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
||
|
||
![]() |