実行時の Office ドキュメントへのコントロールの追加
更新 : 2008 年 7 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 ドキュメント レベルのプロジェクト
アプリケーション レベルのプロジェクト
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
Microsoft Office Word 文書および Microsoft Office Excel ブックでは、実行時にコントロールを追加するだけでなく、削除することもできます。実行時にドキュメントに追加するコントロールをダイナミック コントロールといいます。Visual Studio 2008 Service Pack 1 (SP1) より、アプリケーション レベルのアドインを使用して、ダイナミック コントロールを文書およびブックに追加できるようになりました。
ここでは、次の情報について説明します。
コントロール コレクションによる実行時のコントロールの管理
ドキュメントへのホスト コントロールの追加
ドキュメントへの Windows フォーム コントロールの追加
コントロール コレクションによる実行時のコントロールの管理
実行時にコントロールを追加、取得、または削除するには、Microsoft.Office.Tools.Excel.ControlCollection クラスおよび Microsoft.Office.Tools.Word.ControlCollection クラスのヘルパー メソッドを使用します。
コントロール コレクションにアクセスする方法は、開発しているプロジェクトの種類によって異なります。
Excel のドキュメント レベルのプロジェクトの場合、Sheet1 クラス、Sheet2 クラス、および Sheet3 クラスの Worksheet.Controls プロパティを使用します。これらのクラスの詳細については、「Worksheet ホスト項目」を参照してください。
Word のドキュメント レベルのプロジェクトの場合、ThisDocument クラスの Document.Controls プロパティを使用します。このクラスの詳細については、「Document ホスト項目」を参照してください。
Excel または Word のアプリケーション レベルのプロジェクトの場合、実行時に生成される Microsoft.Office.Tools.Excel.Worksheet または Microsoft.Office.Tools.Word.Document の Controls プロパティを使用します。実行時にこれらのオブジェクトを生成する方法の詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。
コントロールの追加
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.Document の Controls プロパティを使用して、デザイン時に追加したコントロールを含むドキュメント内のすべてのコントロールを反復処理できます。デザイン時に追加するコントロールをスタティック コントロールといいます。
コントロールの Delete メソッドを呼び出すか、または各 Controls コレクションの Remove メソッドを呼び出すことにより、ダイナミック コントロールを削除できます。Remove メソッドを使用して、Excel のドキュメント レベルのプロジェクトの Sheet1 から NamedRange を削除するコード例を次に示します。
Globals.Sheet1.Controls.Remove("ChartSource")
Globals.Sheet1.Controls.Remove("ChartSource");
スタティック コントロールは実行時に削除できません。Delete メソッドまたは Remove メソッドを使用してスタティック コントロールを削除しようとすると、CannotRemoveControlException がスローされます。
メモ : |
---|
ドキュメントの Shutdown イベント ハンドラでは、コントロールをプログラムで削除しないでください。Shutdown イベントが発生すると、ドキュメントの UI 要素は使用できなくなります。ドキュメントが閉じる前にコントロールを削除するには、Document.BeforeClose や Document.BeforeSave (Word) または Workbook.BeforeClose や Workbook.BeforeSave (Excel) などの別のイベント ハンドラにコードを追加します。 |
ドキュメントへのホスト コントロールの追加
ホスト コントロールをプログラムでドキュメントに追加する場合は、そのコントロールを一意に識別する名前を渡し、コントロールを追加するドキュメント上の位置を指定する必要があります。詳細については、次に示すトピックを参照してください。
ホスト コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
ドキュメントを保存して閉じると、動的に作成されたホスト コントロールはすべてイベントから切断され、データ バインディング機能を失います。コードをソリューションに追加して、ドキュメントが再び開かれたときにホスト コントロールを再作成することができます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。
メモ : |
---|
XmlMappedRange、XMLNode、XMLNodes の各ホスト コントロールは、プログラムでドキュメントに追加することができないため、それぞれのヘルパー メソッドは用意されていません。 |
ドキュメントへの Windows フォーム コントロールの追加
Windows フォーム コントロールをプログラムでドキュメントに追加する場合は、そのコントロールの位置とコントロールを一意に識別する名前を渡す必要があります。Visual Studio Tools for Office には、各コントロールに対応するヘルパー メソッドが用意されています。それらのメソッドはオーバーロードされるので、コントロールの位置を範囲または特定の座標で渡すことができます。詳細な手順については、「方法 : Office ドキュメントに Windows フォーム コントロールを追加する」を参照してください。
ドキュメントを保存して閉じるとき、動的に作成された Windows フォーム コントロールはドキュメントから削除されます。コードをソリューションに追加して、ドキュメントが再び開かれたときにコントロールを再作成することができます。アプリケーション レベルのアドインを使用してダイナミック Windows フォーム コントロールを作成する場合、コントロールの ActiveX ラッパーはドキュメント内に保持されます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。
メモ : |
---|
Windows フォーム コントロールは、保護されているドキュメントにはプログラムで追加できません。コントロールを追加するために、Word 文書または Excel ワークシートの保護をプログラムで解除する場合は、ドキュメントを閉じるときにコントロールの ActiveX ラッパーを削除するコードを追加で記述する必要があります。コントロールの ActiveX ラッパーは、保護されているドキュメントから自動的には削除されません。 |
カスタム コントロールの追加
使用できるヘルパー メソッド (たとえばカスタム ユーザー コントロール) でサポートされない System.Windows.Forms.Control を追加するには、次のメソッドを使用します。
Excel では、Microsoft.Office.Tools.Excel.ControlCollection クラスの AddControl() メソッドのいずれかを使用します。
Word では、Microsoft.Office.Tools.Word.ControlCollection クラスの AddControl() メソッドのいずれかを使用します。
コントロールを追加するには、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 または OLEControl のメソッドまたはプロパティを常に使用し、必要なメソッドやプロパティが使用できない場合にのみ System.Windows.Forms.Control を参照してください。
たとえば、OLEObject クラスと System.Windows.Forms.Control クラスの両方に Top プロパティがあります。コントロールの上端とテキストの上端の間の距離を取得または設定するには、System.Windows.Forms.Control の Top プロパティではなく、OLEObject の Top プロパティを使用します。
' 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 ドキュメントでのダイナミック コントロールの永続化
Office ドキュメントでの Windows フォーム コントロールの概要
参照
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
アプリケーション レベルのアドインを使用したドキュメントへのコントロールの追加に関する情報を追加 |
SP1 機能変更 |