実行時の Office ドキュメントへのコントロールの追加

更新 : 2008 年 7 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

ドキュメント レベルのプロジェクト

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

アプリケーション レベルのプロジェクト

  • Excel 2007

  • Word 2007

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Microsoft Office Word 文書および Microsoft Office Excel ブックでは、実行時にコントロールを追加するだけでなく、削除することもできます。実行時にドキュメントに追加するコントロールをダイナミック コントロールといいます。Visual Studio 2008 Service Pack 1 (SP1) より、アプリケーション レベルのアドインを使用して、ダイナミック コントロールを文書およびブックに追加できるようになりました。

ここでは、次の情報について説明します。

  • コントロール コレクションによる実行時のコントロールの管理

  • ドキュメントへのホスト コントロールの追加

  • ドキュメントへの Windows フォーム コントロールの追加

コントロール コレクションによる実行時のコントロールの管理

実行時にコントロールを追加、取得、または削除するには、Microsoft.Office.Tools.Excel.ControlCollection クラスおよび Microsoft.Office.Tools.Word.ControlCollection クラスのヘルパー メソッドを使用します。

コントロール コレクションにアクセスする方法は、開発しているプロジェクトの種類によって異なります。

コントロールの追加

Microsoft.Office.Tools.Excel.ControlCollection クラスおよび Microsoft.Office.Tools.Word.ControlCollection クラスには、ホスト コントロールおよび一般的な Windows フォーム コントロールを文書やワークシートに追加するために使用できるヘルパー メソッドが含まれています。各メソッドの名前は Add<control class> という形式です。control class は追加するコントロールの名前のクラス名です。たとえば、NamedRange コントロールを文書に追加するには、AddNamedRange メソッドを使用します。ヘルパー メソッドの一覧については、「ホスト コントロールのヘルパー メソッド」および「Windows フォーム コントロールのヘルパー メソッド」を参照してください。

Excel のドキュメント レベルのプロジェクトの Sheet1 に NamedRange を追加するコード例を次に示します。

Dim range1 As Excel.Range = Globals.Sheet1.Range("A1", "D5")
Dim namedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
    Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource")
Excel.Range range1 = Globals.Sheet1.Range["A1", "D5"];
Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
    Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource");

コントロールのアクセスおよび削除

Microsoft.Office.Tools.Excel.Worksheet または Microsoft.Office.Tools.Word.DocumentControls プロパティを使用して、デザイン時に追加したコントロールを含むドキュメント内のすべてのコントロールを反復処理できます。デザイン時に追加するコントロールをスタティック コントロールといいます。

コントロールの Delete メソッドを呼び出すか、または各 Controls コレクションの Remove メソッドを呼び出すことにより、ダイナミック コントロールを削除できます。Remove メソッドを使用して、Excel のドキュメント レベルのプロジェクトの Sheet1 から NamedRange を削除するコード例を次に示します。

Globals.Sheet1.Controls.Remove("ChartSource")
Globals.Sheet1.Controls.Remove("ChartSource");

スタティック コントロールは実行時に削除できません。Delete メソッドまたは Remove メソッドを使用してスタティック コントロールを削除しようとすると、CannotRemoveControlException がスローされます。

x97a5x3s.alert_note(ja-jp,VS.90).gifメモ :

ドキュメントの Shutdown イベント ハンドラでは、コントロールをプログラムで削除しないでください。Shutdown イベントが発生すると、ドキュメントの UI 要素は使用できなくなります。ドキュメントが閉じる前にコントロールを削除するには、Document.BeforeCloseDocument.BeforeSave (Word) または Workbook.BeforeCloseWorkbook.BeforeSave (Excel) などの別のイベント ハンドラにコードを追加します。

ドキュメントへのホスト コントロールの追加

ホスト コントロールをプログラムでドキュメントに追加する場合は、そのコントロールを一意に識別する名前を渡し、コントロールを追加するドキュメント上の位置を指定する必要があります。詳細については、次に示すトピックを参照してください。

ホスト コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。

ドキュメントを保存して閉じると、動的に作成されたホスト コントロールはすべてイベントから切断され、データ バインディング機能を失います。コードをソリューションに追加して、ドキュメントが再び開かれたときにホスト コントロールを再作成することができます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。

x97a5x3s.alert_note(ja-jp,VS.90).gifメモ :

XmlMappedRangeXMLNodeXMLNodes の各ホスト コントロールは、プログラムでドキュメントに追加することができないため、それぞれのヘルパー メソッドは用意されていません。

ドキュメントへの Windows フォーム コントロールの追加

Windows フォーム コントロールをプログラムでドキュメントに追加する場合は、そのコントロールの位置とコントロールを一意に識別する名前を渡す必要があります。Visual Studio Tools for Office には、各コントロールに対応するヘルパー メソッドが用意されています。それらのメソッドはオーバーロードされるので、コントロールの位置を範囲または特定の座標で渡すことができます。詳細な手順については、「方法 : Office ドキュメントに Windows フォーム コントロールを追加する」を参照してください。

ドキュメントを保存して閉じるとき、動的に作成された Windows フォーム コントロールはドキュメントから削除されます。コードをソリューションに追加して、ドキュメントが再び開かれたときにコントロールを再作成することができます。アプリケーション レベルのアドインを使用してダイナミック Windows フォーム コントロールを作成する場合、コントロールの ActiveX ラッパーはドキュメント内に保持されます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。

x97a5x3s.alert_note(ja-jp,VS.90).gifメモ :

Windows フォーム コントロールは、保護されているドキュメントにはプログラムで追加できません。コントロールを追加するために、Word 文書または Excel ワークシートの保護をプログラムで解除する場合は、ドキュメントを閉じるときにコントロールの ActiveX ラッパーを削除するコードを追加で記述する必要があります。コントロールの ActiveX ラッパーは、保護されているドキュメントから自動的には削除されません。

カスタム コントロールの追加

使用できるヘルパー メソッド (たとえばカスタム ユーザー コントロール) でサポートされない System.Windows.Forms.Control を追加するには、次のメソッドを使用します。

コントロールを追加するには、System.Windows.Forms.Control、コントロールの位置、およびコントロールを一意に識別する名前を AddControl メソッドに渡します。Excel では、このメソッドは OLEObject を返します。Word では、このメソッドは OLEControl を返します。これらのオブジェクトは、コントロールがワークシートまたは文書とどのように対話するかを定義します。

AddControl(Control, Range, String) メソッドを使用して、カスタム ユーザー コントロールをワークシートに動的に追加するコード例を次に示します。この例では、UserControl1 という名前のユーザー コントロール、および range1 という名前の Range コントロールを使用します。この例は、Excel のドキュメント レベルのプロジェクトのいずれかの Sheetn クラスから実行することを前提としています。

Dim customControl As New UserControl1()

Dim dynamicControl As Microsoft.Office.Tools.Excel.OLEObject = _
    Me.Controls.AddControl(customControl, range1, "dynamic")
UserControl1 customControl = new UserControl1();

Microsoft.Office.Tools.Excel.OLEObject dynamicControl =
    this.Controls.AddControl(customControl, range1, "dynamic");

カスタム コントロールのメンバの使用

AddControl メソッドの 1 つを使用してコントロールをワークシートまたは文書に追加すると、2 つの異なるコントロール オブジェクトが存在するようになります。

これらのコントロールの間で、多くのプロパティおよびメソッドが共有されます。これらのメソッドとプロパティには、適切なコントロールからアクセスする必要があります。

  • カスタム コントロールのみに属するプロパティおよびメソッドにアクセスするには、System.Windows.Forms.Control を使用します。

  • コントロールが共有するプロパティおよびメソッドにアクセスするには、OLEObject または OLEControl を使用します。

System.Windows.Forms.Control から共有のメソッドやプロパティにアクセスした場合は、警告や通知なしにアクセスが失敗します。無効な結果が生成される場合もあります。OLEObject または OLEControl のメソッドまたはプロパティを常に使用し、必要なメソッドやプロパティが使用できない場合にのみ System.Windows.Forms.Control を参照してください。

たとえば、OLEObject クラスと System.Windows.Forms.Control クラスの両方に Top プロパティがあります。コントロールの上端とテキストの上端の間の距離を取得または設定するには、System.Windows.Forms.ControlTop プロパティではなく、OLEObjectTop プロパティを使用します。

' Property is set in relation to the document.
dynamicControl.Top = 100

' Property is set in relation to the container control.
customControl.Top = 100
// Property is set in relation to the document.
dynamicControl.Top = 100;

// Property is set in relation to the container control.
customControl.Top = 100;

参照

処理手順

方法 : ワークシートに ListObject コントロールを追加する

方法 : ワークシートに NamedRange コントロールを追加する

方法 : ワークシートに Chart コントロールを追加する

方法 : Word 文書にコンテンツ コントロールを追加する

方法 : Word 文書に Bookmark コントロールを追加する

方法 : Office ドキュメントに Windows フォーム コントロールを追加する

概念

Office ドキュメントでのダイナミック コントロールの永続化

ホスト コントロールのヘルパー メソッド

Windows フォーム コントロールのヘルパー メソッド

Office ドキュメントでの Windows フォーム コントロールの概要

参照

ControlCollection.AddControl

ControlCollection.AddControl

ControlCollection.Remove

ControlCollection.Remove

その他の技術情報

Office ドキュメントのコントロール

Excel のホスト コントロール

Word ホスト コントロール

履歴の変更

日付

履歴

理由

2008 年 7 月

アプリケーション レベルのアドインを使用したドキュメントへのコントロールの追加に関する情報を追加

SP1 機能変更