VSTO アドインをプログラムする

VSTO アドインを作成して Microsoft Office アプリケーションを拡張するときは、プロジェクトの ThisAddIn クラスに対して直接コードを記述します。 このクラスを使用し、Microsoft Office ホスト アプリケーションのオブジェクト モデルにアクセスする、アプリケーションのユーザー インターフェイス (UI) をカスタマイズする、その他の Office ソリューションに VSTO アドインのオブジェクトを公開するなどの作業を実行できます。

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

VSTO アドイン プロジェクトのコードの記述には、Visual Studio の他のプロジェクトの種類とは異なる点があります。 相違点の多くは、Office オブジェクト モデルがマネージド コードに公開される方法に起因しています。 詳しくは、「Office ソリューションでコードを書く」をご覧ください。

VSTO アドインと、Visual Studio の Office 開発ツールを使用して作成できる他の種類のソリューションについては、「Office ソリューションの開発の概要 (VSTO)」を参照してください。

ThisAddIn クラスを使用する

VSTO アドイン コードの記述は ThisAddIn クラスから開始することができます。 Visual Studio の場合、VSTO アドイン プロジェクトの ThisAddIn.vb (Visual Basic の場合) または ThisAddIn.cs (C# の場合) コード ファイルで、このクラスが自動生成されます。 Visual Studio Tools for Office Runtime では、Microsoft Office アプリケーションが VSTO アドインを読み込むと、このクラスを自動的にインスタンス化します。

ThisAddIn クラスには既定のイベント ハンドラーが 2 つあります。 VSTO アドインが読み込まれるときにコードを実行するには、 ThisAddIn_Startup イベント ハンドラーにコードを追加します。 VSTO アドインが読み込み解除される直前にコードを実行するには、 ThisAddIn_Shutdown イベント ハンドラーにコードを追加します。 これらのイベント ハンドラーについて詳しくは、「Office プロジェクトのイベント」をご覧ください。

Note

Outlook の場合、既定では、VSTO アドインが読み込み解除されるときに ThisAddIn_Shutdown イベント ハンドラーが常に呼び出されるとは限りません。 詳細については、「Office プロジェクトのイベント」を参照してください。

ホスト アプリケーションのオブジェクト モデルにアクセスする

ホスト アプリケーションのオブジェクト モデルにアクセスするには、 Application クラスの ThisAddIn フィールドを使用します。 このフィールドはホスト アプリケーションの現在のインスタンスを表すオブジェクトを返します。 次の表は各 VSTO アドイン プロジェクトの Application フィールドの戻り値の型をまとめたものです。

ホスト アプリケーション 戻り値の型
Microsoft Office Excel Application
Microsoft Office InfoPath Application
Microsoft Office Outlook Application
Microsoft Office PowerPoint Application
Microsoft Office Project Microsoft.Office.Interop.MSProject.Application
Microsoft Office Visio Microsoft.Office.Interop.Visio.Application
Microsoft Office Word Application

次のコード例は、Application フィールドを使って、Microsoft Office Excel の VSTO アドインで新しいブックを作成する方法を示したものです。 この例は ThisAddIn クラスから実行することを意図しています。

Excel.Workbook newWorkbook = this.Application.Workbooks.Add(System.Type.Missing);

同じ処理を ThisAddIn クラスの外から行うには、 Globals オブジェクトを使用して ThisAddIn クラスにアクセスします。 Globals オブジェクトについて詳しくは、「Office プロジェクト内のオブジェクトへのグローバル アクセス」をご覧ください。

Excel.Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Add(System.Type.Missing);

特定の Microsoft Office アプリケーションのオブジェクト モデルの詳細については、以下のトピックを参照してください。

Office アプリの開始時にドキュメントにアクセスする

すべての Office 2010 アプリケーションで起動時にドキュメントが自動的に開くわけではありません。Office 2013 アプリケーションの場合、起動時にドキュメントは開きません。 そのため、コードでドキュメントを開く必要がある場合、ThisAdd-In_Startup イベント ハンドラーにコードを追加することはしないでください。 代わりに、ユーザーがドキュメントを作成するとき、または開くときに Office アプリケーションが発生させるイベントにそのコードを追加します。 この方法により、コードがドキュメントに操作を実行する前にドキュメントが確実に開きます。

次のコード例は、ユーザーがドキュメントを作成した、または既存のドキュメントを開いたときにのみ、Word のドキュメントと連動します。

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.DocumentOpen +=
new Word.ApplicationEvents4_DocumentOpenEventHandler(WorkWithDocument);

        ((Word.ApplicationEvents4_Event)this.Application).NewDocument +=
            new Word.ApplicationEvents4_NewDocumentEventHandler(WorkWithDocument);  
    }
    
    private void WorkWithDocument(Microsoft.Office.Interop.Word.Document Doc)
    {
        try
        {
            Word.Range rng = Doc.Range(0, 0);
            rng.Text = "New Text";
            rng.Select();
        }
        catch (Exception ex)
        {
            // Handle exception if for some reason the document is not available.
        }
    }

他のタスクに使用する ThisAddIn メンバー

次の表は、他の一般的なタスクに関する説明とタスクを実行するために使用できる ThisAddIn クラスのメンバーをまとめたものです。

タスク 使用するメンバー
VSTO アドインが読み込まれるときに VSTO アドインを初期化するコードを実行します。 ThisAddIn_Startup メソッドにコードを追加します。 これは Startup イベントの既定のイベント ハンドラーです。 詳細については、「Office プロジェクトのイベント」を参照してください。
VSTO アドインが読み込み解除される前に VSTO アドインにより使用されるリソースを消去するコードを実行します。 ThisAddIn_Shutdown メソッドにコードを追加します。 これは Shutdown イベントの既定のイベント ハンドラーです。 詳細については、「Office プロジェクトのイベント」を参照してください。 注: Outlook の場合、既定では、VSTO アドインがアンロードされるときに ThisAddIn_Shutdown イベント ハンドラーが常に呼び出されるとは限りません。 詳細については、「Office プロジェクトのイベント」を参照してください。
カスタム作業ウィンドウを表示します。 CustomTaskPanes フィールドを使用します。 詳細については、「カスタム作業ウィンドウ」を参照してください。
その他の Microsoft Office ソリューションに VSTO アドインのオブジェクトを公開します。 RequestComAddInAutomationService メソッドをオーバーライドします。 詳細については、「他の Office ソリューションから VSTO アドインのコードを呼び出す」を参照してください。
機能拡張インターフェイスを実装することで Microsoft Office システムの機能をカスタマイズします。 RequestService メソッドをオーバーライドし、このインターフェイスを実装するクラスのインスタンスを返します。 詳しくは、「機能拡張インターフェイスを使用して UI 機能をカスタマイズする」をご覧ください。 注: リボン UI をカスタマイズするために、CreateRibbonExtensibilityObject メソッドをオーバーライドすることもできます。

ThisAddIn クラスの設計について

.NET Framework 4 を対象とするプロジェクトでは、AddIn はインターフェイスです。 ThisAddIn クラスは AddInBase クラスから派生します。 この基本クラスは Visual Studio Tools for Office Runtime でそのメンバーのすべての呼び出しを AddIn インターフェイスの内部実装にリダイレクトします。

Outlook の VSTO アドイン プロジェクトで、ThisAddIn クラスは .NET Framework 3.5 を対象とするプロジェクトの Microsoft.Office.Tools.Outlook.OutlookAddIn クラスと .NET Framework 4 を対象とするプロジェクトの OutlookAddInBase から誘導されます。 これらの基本クラスは、フォーム領域をサポートするための追加の機能をいくつか提供します。 フォーム領域について詳しくは、「Outlook フォーム領域の作成」をご覧ください。

Microsoft Office アプリケーションのユーザー インターフェイスをカスタマイズする

VSTO アドインを使用すれば、Microsoft Office アプリケーションの UI をプログラミングでカスタマイズできます。 たとえば、Outlook でリボンをカスタマイズしたり、カスタム作業ウィンドウを表示したり、カスタム フォーム領域を作成したりできます。 詳細については、「Office UI のカスタマイズ」を参照してください。

Visual Studio は、カスタム作業ウィンドウの作成、リボンのカスタマイズ、Outlook フォーム領域の作成に使用できるデザイナーとクラスを提供します。 これらのデザイナーやクラスはこれらの機能のカスタマイズ プロセスの簡素化に役立ちます。 詳しくは、「カスタム作業ウィンドウ」、「リボン デザイナー」、「Outlook フォーム領域の作成」をご覧ください。

クラスとデザイナーでサポートされない方法でこれらの機能をカスタマイズする場合、VSTO アドインに 拡張機能インターフェイス を実装する方法でカスタマイズすることもできます。 詳しくは、「機能拡張インターフェイスを使用して UI 機能をカスタマイズする」をご覧ください。

さらに、文書やブックの動作を拡張するホスト項目を生成する方法で Word 文書や Excel ブックを変更できます。 この方法で、管理されているコントロールを文書とワークシートに追加できます。 詳細については、「実行時に VSTO アドインの Word 文書と Excel ブックを拡張する」を参照してください。

他のソリューションから VSTO アドインのコードを呼び出す

VSTO アドインのオブジェクトを、他の Microsoft Office ソリューションを含む、他のソリューションに公開できます。 このことは、VSTO アドインが他のソリューションで使用可能なサービスを含む場合に便利です。 たとえば、Web サービスから受け取る財務データについて計算を実行する、Microsoft Office Excel 向けの VSTO アドインがある場合に、他のソリューションで、実行時に Excel VSTO アドインを呼び出して、それらの計算を実行することもできます。

詳細については、「他の Office ソリューションから VSTO アドインのコードを呼び出す」を参照してください。