実行時バインディングと事前バインディング

 前述のCreateObject関数を使った構文では、Objectキーワードを使って、総称オブジェクト型の変数を宣言しています。総称オブジェクト型ですから、プログラミング的には“汎用性”に富んでいます。しかし、変数objWordがWordの最上位のApplicationオブジェクトであることは、コードを実行したときにはじめて解釈されます。そして、この解釈のためにオーバーヘッドが生じてコードの実行速度が落ちるのです。ちなみに、このようなインスタンスの生成方法を実行時バインディングと呼びます。汎用的だけれども非効率的。これが実行時バインディングの特徴です。
 それに対して、コードを実行する前にインスタンスを生成しておく方法があります。この方法は、実行時バインディングに対して事前バインディングと呼ばれます。
 オートメーションで事前バインディングを実現するためには、外部オブジェクトが提供する「オブジェクトライブラリ(.OLB)」と呼ばれるファイルが必要になります。このファイルは、外部オブジェクトへの参照を設定することで使用可能となります。
 オブジェクトライブラリを参照するには、Visual Basic Editor(以下VBE)で[ツール]-[参照設定]コマンドを実行して、[参照設定]ダイアログボックスを開きます。そして、目的のオブジェクトライブラリのチェックボックスをオンにします(図1)。

図1:[参照設定]ダイアログボックスでWord 2000(9.0)のオブジェクトライブラリを参照する

 この参照設定をすると、Objectキーワードを使わずに、固有オブジェクト型で変数を宣言して、CreateObject関数が使用できるようになります。


Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
 さらに、次のようにNewキーワードで変数を宣言すれば、CreateObject関数を使わずに、外部アプリケーションの新しいインスタンスが作成できます。

Dim objWord As New Word.Application
 これで、CreateObject関数を使う必然性はなくなりました。つまりこれは、コードの実行時にオブジェクトの型を解釈する必要がないということですので、当然、コードのパフォーマンスも向上します。これが、事前バインディングなのです。