次の方法で共有


ドキュメント レベルのカスタマイズにおけるネイティブな Office オブジェクトからの拡張オブジェクトの取得

更新 : 2008 年 7 月

対象

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

プロジェクトの種類

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

Microsoft Office のバージョン

  • Excel 2007

  • Word 2007

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

Office イベントのイベント ハンドラの多くは、イベントを発生させたブック、ワークシート、または文書を表すネイティブな Office オブジェクトを受け取ります。場合によっては、ドキュメント レベルのカスタマイズでブックや文書がイベントを発生させたときにのみ、コードを実行することができます。たとえば、Excel のドキュメント レベルのカスタマイズで、ユーザーがカスタマイズ内のいずれかの Microsoft.Office.Tools.Excel.Worksheet ホスト項目をアクティブにしたときにはコードを実行し、同時に開いている他のブック内のワークシートをアクティブにしたときにはコードを実行しないようにすることができます。

Visual Studio 2008 Service Pack 1 (SP1) 以降、ネイティブな Office オブジェクトを取得するときに、そのオブジェクトがドキュメント レベルのカスタマイズ内のホスト項目または Microsoft.Office.Tools.Excel.ListObject ホスト コントロールに拡張されているかどうかをテストできるようになりました。

ホスト項目とホスト コントロールは、Word または Excel のオブジェクト モデルにネイティブに存在するオブジェクト (ネイティブな Office オブジェクトと呼ばれます) に対して機能を追加する Visual Studio Tools for Office オブジェクトです。ホスト項目とホスト コントロールは、まとめて拡張オブジェクトとも呼ばれます。ホスト項目とホスト コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。

GetVstoObject メソッドと HasVstoObject メソッドの使用

ネイティブな Office オブジェクトをテストするには、次のいずれかのネイティブな Office オブジェクトのインスタンスの HasVstoObject メソッドと GetVstoObject メソッドを使用します。

ネイティブな Office オブジェクトがカスタマイズに拡張オブジェクトを保有しているかどうかだけを確認する場合には、HasVstoObject メソッドを使用します。このメソッドは、ネイティブな Office オブジェクトに拡張オブジェクトがある場合は true を返し、それ以外の場合は false を返します。

拡張オブジェクトを取得する場合は、GetVstoObject メソッドを使用します。このメソッドは、ネイティブな Office オブジェクトに拡張オブジェクトがある場合は Microsoft.Office.Tools.Excel.ListObjectMicrosoft.Office.Tools.Excel.WorkbookMicrosoft.Office.Tools.Excel.WorksheetMicrosoft.Office.Tools.Word.Document のいずれかのオブジェクトを返します。それ以外の場合、GetVstoObject は null を返します。たとえば、Microsoft.Office.Interop.Word.Document が Word 文書プロジェクトの文書の基になるオブジェクトである場合、Microsoft.Office.Interop.Word.Document オブジェクトの GetVstoObject メソッドは Microsoft.Office.Tools.Word.Document を返します。

ドキュメント レベルのソリューションでは、GetVstoObject を使用して実行時に新しいホスト項目を作成することはできません。このメソッドを使用できるのは、デザイン時にプロジェクトで生成した既存のホスト項目にアクセスするときだけです。詳細については、「ホスト項目およびホスト コントロールのプログラム上の制限事項」を参照してください。

アプリケーション レベルのプロジェクトでは、GetVstoObject メソッドを使用して実行時に新しいホスト項目を生成できます。詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。

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

GetVstoObject メソッドと HasVstoObject メソッドを使用するには、コード ファイルの先頭に、Microsoft.Office.Tools.Excel.Extensions 名前空間または Microsoft.Office.Tools.Word.Extensions 名前空間に対する using ステートメント (C# の場合) または Imports ステートメント (Visual Basic の場合) を追加する必要があります。GetVstoObject メソッドと HasVstoObject メソッドは、Visual Studio Tools for Office ランタイムに拡張メソッドとして実装されます。前に説明したステートメントを使用することで、これらのメソッドを呼び出すことができます。

ホスト項目がイベントを発生させたかどうかの確認

HasVstoObject メソッドおよび GetVstoObject メソッドのコード例を次に示します。どちらの例も、Excel ブック プロジェクトの ThisWorkbook クラスの SheetActivate イベントを処理します。

最初の例では、Sh パラメータと既定のホスト項目の InnerObject プロパティとの比較によって、いずれかの Microsoft.Office.Tools.Excel.Worksheet ホスト項目がアクティブにされたかどうかを確認します。

Sub ThisWorkbook_SheetActivate1(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing

    If Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet1
    ElseIf Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet2
    ElseIf Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet3
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate1(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;

    if (Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet1;
    else if (Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet2;
    else if (Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet3;

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

2 番目の例では、Sh パラメータの HasVstoObject メソッドと GetVstoObject メソッドを使用して、このプロセスを簡略化します。

Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
    Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet = _
        CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)

    If interopWorksheet IsNot Nothing AndAlso _
        interopWorksheet.HasVstoObject() Then
        vstoWorksheet = interopWorksheet.GetVstoObject()
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
    Microsoft.Office.Interop.Excel.Worksheet interopWorksheet = 
        Sh as Microsoft.Office.Interop.Excel.Worksheet;

    if (interopWorksheet != null && interopWorksheet.HasVstoObject())
    {
        vstoWorksheet = interopWorksheet.GetVstoObject();
    }

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

参照

概念

ドキュメント レベルのカスタマイズのプログラミング

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

アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張

拡張メソッド (Visual Basic)

参照

拡張メソッド (C# プログラミング ガイド)

履歴の変更

日付

履歴

理由

2008 年 7 月

トピックを追加

SP1 機能変更