ホスト項目とホスト コントロールの概要

ホスト項目とホスト コントロールは、Visual Studio の Office 開発ツールを使用して作成される Office ソリューションのプログラミング モデルを提供する助けとなる型です。 ホスト項目とホスト コントロールは、Microsoft Office Word および Microsoft Office Excel の COM ベースのオブジェクト モデルとの対話を、Windows フォーム コントロールなどのマネージド オブジェクトとの対話と似たものにします。

対象: このトピックの情報は、Excel および Word のドキュメントレベルのプロジェクトおよび VSTO アドインのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

ホスト項目

ホスト項目は、Office プロジェクトでオブジェクト モデルの階層構造の最上位にある型です。 Visual Studio Tools for Office ランタイムは、Word と Excel のソリューションに対して次のホスト項目を定義します。

  • Document

  • Workbook

  • Worksheet

  • ChartSheet

    これらの型はそれぞれが、Word または Excel のオブジェクト モデルにネイティブに存在する ネイティブ Office オブジェクトと呼ばれるオブジェクトを拡張します。 たとえば、 Document ホスト項目は、Word のプライマリ相互運用機能アセンブリに定義されている Document オブジェクトを拡張します。

    ホスト項目は、一般に、対応する Office オブジェクトと同じ基本機能を備えていますが、さらに次の機能を備えています:

  • ホスト コントロールや Windows フォーム コントロールなどのマネージド コントロールをホストする機能。

  • 豊富なイベント モデル。 ネイティブの Word または Excel オブジェクト モデルの一部の文書、ブック、ワークシート イベントはアプリケーション レベルでのみ発生します。 ホスト項目は文書レベルでこれらのイベントを提供します。そのため、特定の文書のイベントを簡単に処理できます。

ドキュメント レベルのプロジェクトのホスト項目について

ドキュメント レベルのプロジェクトでは、ホスト項目はコードのエントリ ポイントを提供し、ソリューションの開発に役立つデザイナーを備えています。

DocumentWorksheet のホスト項目は、Windows フォーム デザイナーに似た、文書やワークシートを視覚的に表現する関連デザイナーを備えています。 このデザイナーを使用して、Word や Excel で文書やワークシートのコンテンツを変更したり、デザイン サーフェイスにコントロールをドラッグしたりすることができます。 詳細については、「Document ホスト項目」および「Worksheet ホスト項目」を参照してください。

Workbook ホスト項目は、ユーザー インターフェイスのあるコントロールのコンテナーとしては動作しません 代わりに、このホスト項目のデザイナーはコンポーネント トレイとして機能し、ユーザーはこのデザイナーを使用して DataSetなどのコンポーネントをデザイン サーフェイスにドラッグできます。 詳細については、「Workbook ホスト項目」を参照してください。

ドキュメント レベルのプロジェクトでは、ホスト項目をプログラムで作成することはできません。 その代わり、デザイン時に Visual Studio によってプロジェクトに自動的に生成される ThisDocumentThisWorkbook、または Sheetn クラスを使用します。 生成されるこれらのクラスは、ホスト項目から派生するもので、コードのエントリ ポイントを提供します。 詳細については、「ホスト項目とホスト コントロールのプログラム上の制限事項」を参照してください。

VSTO アドイン プロジェクトのホスト項目について

VSTO アドインを作成する場合、既定では、ホスト項目にはアクセスできません。 ただし、Word および Excel の VSTO アドインでは、実行時に DocumentWorkbook、および Worksheet ホスト項目を生成できます。

ホスト項目を生成すると、文書にコントロールを追加するなどのタスクを実行できます。 詳細については、「実行時に VSTO アドインの Word 文書と Excel ブックを拡張する」を参照してください。

ホスト コントロール

ホスト コントロールは、Word や Excel のオブジェクト モデルで、Microsoft.Office.Interop.Word.ContentControlRange オブジェクトなどのさまざまなユーザー インターフェイス (UI) オブジェクトを拡張します。

Excel プロジェクトで使用できるホスト コントロールを次に示します:

  • Chart コントロール

  • ListObject コントロール

  • NamedRange コントロール

  • XmlMappedRange コントロール

    Word プロジェクトで使用できるホスト コントロールを次に示します:

  • Bookmark コントロール

  • コンテンツ コントロール

  • XMLNode コントロール

  • XMLNodes コントロール

    Office ドキュメントに追加されたホスト コントロールは、ネイティブな Office オブジェクトのように動作しますが、ホスト コントロールには、イベントやデータ バインディング機能を含む追加の機能があります。 たとえば、Excel 内のネイティブな Range オブジェクトのイベントをキャプチャするには、最初にワークシートの変更イベントを処理する必要があります。 次に、変更が Range内で発生したかどうかを判断する必要があります。 一方、 NamedRange ホスト コントロールには、直接処理できる Change イベントがあります。

    ホスト項目とホスト コントロールの関係は、Windows フォームと Windows フォーム コントロールの関係に似ています。 Windows フォームにテキスト ボックス コントロールを配置するのと同じように、 NamedRange ホスト項目に Worksheet コントロールを配置します。 次の図は、ホスト項目とホスト コントロールの関係を示しています。

    Relationship between host items and host controls

    また、Windows フォーム コントロールを Word および Excel の文書領域に直接追加することによって、Office ソリューションで Windows フォーム コントロールを使用できます。 詳細については、「Office ドキュメントでの Windows フォーム コントロールの概要」を参照してください。

Note

Word サブ文書へのホスト コントロールおよび Windows フォーム コントロールの追加はサポートされていません。

ホスト コントロールをドキュメントに追加する

ドキュメント レベルのプロジェクトでは、次の方法を使用して、デザイン時に Word 文書や Excel ワークシートにホスト コントロールを追加できます。

ホスト コントロールに名前を付ける

ツールボックス から文書にホスト コントロールをドラッグすると、コントロールには自動的にコントロールの型と末尾の増分番号で構成される名前が付けられます。 たとえば、ブックマークには bookmark1bookmark2などの名前が付けられます。 Word または Excel のネイティブ機能を使用してコントロールを追加する場合は、コントロールの作成時に特定の名前を指定できます。 [プロパティ] ウィンドウで、 [名前] プロパティの値を変更してコントロールの名前を変更することもできます。

Note

ホスト コントロールの名前に予約語は使用できません。 たとえば、 NamedRange コントロールをワークシートに追加し、名前を Systemに変更すると、プロジェクトをビルドするときにエラーが発生します。

ホスト コントロールを削除する

ドキュメント レベルのプロジェクトでは、デザイン時に Excel ワークシートまたは Word 文書のコントロールを選択し、Delete キーを押してホスト コントロールを削除できます。 ただし、 コントロールを削除するには、Excel の [名前の定義] NamedRange ダイアログ ボックスを使用する必要があります。

デザイン時に文書にホスト コントロールを追加した場合は、それを実行時にプログラムで削除しないでください。次にコード内でコントロールを使用すると、例外がスローされます。 ホスト コントロールの Delete メソッドは、実行時に文書に追加されたホスト コントロールのみを削除します。 デザイン時に作成されたホスト コントロールの Delete メソッドを呼び出すと、例外がスローされます。

たとえば、 DeleteNamedRange メソッドは、プログラムによってワークシートに追加された場合のみ (動的に作成されたホスト コントロールと呼ばれます)、 NamedRange を正しく削除します。 動的に作成されたホスト コントロールは、コントロール名を Remove プロパティまたは Controls プロパティの Controls メソッドに渡すことによっても削除できます。 詳細については、「実行時に Office 文書にコントロールを追加する」を参照してください。

エンド ユーザーが実行時にドキュメントからホスト コントロールを削除すると、ソリューションは予想外の形で失敗することがあります。 Word および Excel のドキュメント保護機能を使用して、ホスト コントロールが削除されないように保護できます。 詳細については、「Office 開発のサンプルとチュートリアル」を参照してください。

Note

文書やワークシートの Shutdown イベント ハンドラーでは、コントロールをプログラムで削除しないでください。 Shutdown イベントが発生すると、UI 要素は使用できなくなります。 アプリケーションが終了する前にコントロールを削除する場合は、 BeforeCloseBeforeSaveなどの別のイベント ハンドラーにコードを追加してください。

ホスト コントロール イベントに対するプログラミング

ホスト コントロールが Office オブジェクトを拡張する方法の 1 つに、イベントの追加が挙げられます。 たとえば、Excel の Range オブジェクトと Word の Bookmark オブジェクトはイベントを持ちませんが、Visual Studio Tools for Office ランタイムでは、プログラミング可能なイベントを追加することによってこれらのオブジェクトを拡張します。 Windows フォームのコントロールのイベントにアクセスするのと同じ方法で、これらのイベントにアクセスし、コーディングすることができます。Visual Basic ではイベント ドロップダウン リストを使用し、C# ではイベント プロパティ ページを使用します。 詳しくは、「チュートリアル: NamedRange コントロールのイベントに対するプログラミング」をご覧ください。

Note

Excel の EnableEvents オブジェクトの Application プロパティを falseと呼ばれるオブジェクトを拡張します。 このプロパティを false に設定すると、ホスト コントロールのイベントを含む、すべてのイベントが Excel で発生しなくなります。