Office 統合ソリューションを開発する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

Office 統合ソリューションの開発は次の 2 つのテクノロジによって可能になります。

  • コンポーネント オブジェクト モデル (COM) のソフトウェア アーキテクチャ

  • Visual Basic for Applications (VBA)

COM ソフトウェア アーキテクチャにより、総称的に "COM コンポーネント" または "コンポーネント" と呼ばれる各ソフトウェア コンポーネントからアプリケーションおよびサービスを作成することができます。COM コンポーネントは、プログラミング可能なオブジェクトを定義するコード モジュールである "クラス" を含む、コンパイルされた物理的なファイルによって構成されます。COM コンポーネントには "インプロセス コンポーネント" と "アウトプロセス コンポーネント" の 2 種類があります。インプロセス コンポーネントは DLL または ActiveX コントロール (.ocx ファイル) であり、別のアプリケーションのプロセス内でのみ動作します。アウトプロセス コンポーネントは .exe ファイルであり、自立型アプリケーションとして動作します。COM コンポーネントはアプリケーションの開発において、次のいずれかまたは両方の役割を果たします。

  • ほかのアプリケーションとオブジェクトを共有します。この役割は "オートメーション サーバー" と呼ばれます。

  • ほかのコンポーネントのオブジェクトを使用します。この役割は "オートメーション クライアント" と呼ばれます。旧ドキュメントでは "オートメーション コントローラ" と呼ばれていました。

Windows® オペレーティング システムと Office 統合アプリケーションは、COM ソフトウェア アーキテクチャを使用して開発された製品の例です。COM を使用して開発したソフトウェアが、必ずしも VBA を使用してプログラミング可能であるとは限りません。ただし、アプリケーションまたはサービスが、オートメーションとして知られる COM テクノロジをサポートする場合、VBA およびその他の言語でプログラミング可能なオブジェクトとして、そのコンポーネントの機能に対してインターフェイスを公開することができます。オートメーションをサポートするには、アプリケーションまたはサービスで、カスタム インターフェイスを公開する次の 2 つの方法のいずれかまたは両方が使用可能である必要があります。

  • IDispatch インターフェイスを提供する方法。この方法を使用すると、アプリケーションまたはサービスに対してクエリが実行され、カスタム インターフェイスに関する情報を取得できます。IDispatch インターフェイスをサポートするアプリケーションおよびサービスは、実行時バインディングと呼ばれる方法で実行時にカスタム インターフェイスに関する情報を提供します。

  • デザイン時に、仮想関数テーブルまたは vtable にある、インターフェイスをインプリメントするメンバ関数に直接アクセスすることを許可する方法。カスタム インターフェイスに直接アクセスできるアプリケーションおよびサービスは、vtable バインディングまたは事前バインディングと呼ばれる方法をサポートします。

アプリケーションがこれらの方法のいずれかをサポートする場合、そのアプリケーションはオートメーションをサポートすると考えられます (両方をサポートする必要はありません)。最近リリースされたアプリケーションおよびサービスはいずれの方法もサポートし、"デュアル インターフェイスをサポートする" アプリケーションおよびサービスと呼ばれています。

実行時バインディングと事前バインディングの相違点については、この章の「オブジェクト変数を宣言する」を参照してください。

事前バインディングをサポートするアプリケーションまたはサービスは、"タイプ ライブラリ" (または "オブジェクト ライブラリ") を提供するものである必要があります。タイプ ライブラリは、1 つまたは複数のオブジェクト型を示すファイルまたはファイルの一部です。タイプ ライブラリには、オブジェクトではなくオブジェクト型の情報が保存されます。タイプ ライブラリにアクセスすることにより、オブジェクトがサポートするインターフェイスおよび各インターフェイスのメンバの名前やアドレスなど、オブジェクトの特徴をプログラミング環境で認識することができます。この情報により、公開されたインターフェイスでプログラミング言語を使用することが可能になります。

VBA プログラミング環境ではタイプ ライブラリへの接続を確立することができ、これを "参照の確立" と呼びます。タイプ ライブラリへの参照を確立すると、オブジェクト ブラウザを使用して、タイプ ライブラリから使用可能なオブジェクトに関する情報を表示できます。タイプ ライブラリへの参照を確立することにより、VBA を使用してコンパイル時にエラーの存在を調べ、タイプ ライブラリに対して記述されたコードに不適切な宣言によるエラーがないこと、または不適切な種類の値を渡していないことを確認できます。また、タイプ ライブラリを参照することにより、タイプ ライブラリによって公開されるオブジェクトのプロパティおよびメソッドのリストを自動的に作成する機能など、コードの記述を簡易化する VBA の機能を使用することも可能です。さらに、プログラミングを行うオブジェクトに関する情報を VBA でのデザイン時に使用できるため、作成したコードの動作がすばやくなります。この情報はコンパイル時に行うコードの最適化にも使用できます。タイプ ライブラリの参照およびオブジェクト ブラウザの使用については、この章の「オブジェクト変数を宣言する」を参照してください。

VBA プログラミング環境は、オートメーションをサポートしてプログラミング可能にするアプリケーションに組み込むことができます。Microsoft Office 統合アプリケーションには、次々に開発されている AutoCAD および Visio などのアプリケーションと同様に、VBA プログラミング環境が組み込まれ、オートメーション インターフェイスの両方の種類をサポートするように記述されています。また、ActiveX コントロールおよび DLL など多くのソフトウェア コンポーネントでは、オートメーション インターフェイスを通じて VBA プログラマに機能が公開されます。

オートメーション インターフェイスを通じて公開されるオブジェクト、プロパティ、およびメソッドを使用して、現在開いているドキュメント、テンプレート、データベース、Microsoft FrontPage® で作成した Web、またはアプリケーションを自動化するアドインに関連するモジュールで動作する VBA コードを使用することができます。VBA およびオートメーションによって、キー入力およびマウス操作を自動化する簡単なマクロを記録したり (マクロ記録をサポートするアプリケーションで可能)、文書管理、表計算、およびデータベースのアプリケーションなどの高度なソリューションを作成することができます。

統合アプリケーションをよりパワフルにするために、アプリケーションで動作している VBA コードを使用して、別のアプリケーションまたはコンポーネントからオブジェクトを作成したり、オブジェクトで作業することも可能です。たとえば、ソリューションを Access で開発する際、Excel でのみ有効な数式やその他の機能を使用できるようにするには、VBA を使用して Excel のインスタンスを作成し、Access で動作しているコードの機能を使用します。

オートメーションは、アプリケーションとコンポーネント間でプログラム通信とフィードバックを行う神経系、および Office アプリケーションとほかのソフトウェア コンポーネントをカスタム ソリューションとして統合する "接着剤" としての役割を果たします。

VBA ではオートメーションがサポートされるため、Office の開発者は柔軟性と機能性に優れた環境でプログラムを作成することができます。オートメーションを使用して、Office 統合アプリケーション全体およびオートメーション インターフェイスをサポートするサード パーティのアプリケーションとコンポーネントのオブジェクト モデルによって公開される機能を、ビジネス アプリケーションを構築するブロックのセットとして使用できます。オートメーションを通じて公開する、ビルド済みのコンポーネントを使用すると、カスタム コンポーネントおよびプロシージャを作業のたびに作成する必要がなくなります。ビルド済みのコンポーネントを使用することにより、ソリューションの開発時間を短縮するだけでなく、デザイン、開発、およびテスティングを含む開発過程に必要な時間を短縮することができます。

VBA およびオートメーションで公開するオブジェクトを使用することによって、目的のタスクの実行に最適な関数を選択して、ユーザーのニーズに合ったデータを提供し、効率的かつ生産的なソリューションを実現するワークフローを作成することができます。