Office プロジェクトのイベント

各 Office プロジェクト テンプレートは、自動的に複数のイベント ハンドラーを生成します。 ドキュメント レベルのカスタマイズに使用するイベント ハンドラーは、VSTO アドイン用のイベント ハンドラーとは若干異なります。

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

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

Visual Studio では、ドキュメント レベルのカスタマイズ内の新規または既存のドキュメントまたはワークシートの背後に生成されたコードを提供します。 このコードは 2 つの異なるイベントを発生させます。 StartupShutdownです。

Startup イベント

Startup イベントは、ドキュメントが実行中になり、アセンブリ内の初期化コードがすべて実行された後で、ホスト項目 (ドキュメント、ブックまたはワークシート) ごとに発生します。 これは、コードが実行されているクラスのコンストラクターで最後に実行されるイベントです。 ホスト項目の詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。

ドキュメント レベルのプロジェクトを作成する場合、Visual Studio は生成されたコード ファイル内の Startup イベント用に次のイベント ハンドラーを作成します。

  • Microsoft Office Word プロジェクトの場合、イベント ハンドラーの名前は ThisDocument_Startupです。

  • Microsoft Office Excel プロジェクトの場合、イベント ハンドラーの名前は次のようになります。

    • Sheet1_Startup

    • Sheet2_Startup

    • Sheet3_Startup

    • ThisWorkbook_Startup

Shutdown イベント

Shutdown イベントは、コードが読み込まれるアプリケーション ドメインがアンロードされるときに、ホスト項目 (ドキュメントまたはワークシート) ごとに発生します。 これは、アンロード時にクラス内で呼び出される最後のイベントです。

ドキュメント レベルのプロジェクトを作成する場合、Visual Studio は生成されたコード ファイル内の Shutdown イベント用に次のイベント ハンドラーを作成します。

  • Microsoft Office Word プロジェクトの場合、イベント ハンドラーの名前は ThisDocument_Shutdownです。

  • Microsoft Office Excel プロジェクトの場合、イベント ハンドラーの名前は次のようになります。

    • Sheet1_Shutdown

    • Sheet2_Shutdown

    • Sheet3_Shutdown

    • ThisWorkbook_Shutdown

Note

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

イベント ハンドラー メソッドの宣言

イベント ハンドラー メソッドの宣言にはすべて次の同じ引数が渡されます。 sendereです。 Excel では、 sender 引数は Sheet1Sheet2などのシートを参照します。Word では、 sender 引数はドキュメントを参照します。 e 引数は、ここでは使用されませんが、イベントの標準の引数を参照します。

次のコード例は、Word のドキュメント レベルのプロジェクト内にある既定のイベント ハンドラーを示します。

private void ThisDocument_Startup(object sender, System.EventArgs e)
{
}

private void ThisDocument_Shutdown(object sender, System.EventArgs e)
{
}

次のコード例は、Excel のドキュメント レベルのプロジェクト内にある既定のイベント ハンドラーを示します。

Note

次のコード例は、 Sheet1 クラスのイベント ハンドラーを示します。 その他のホスト項目クラス内のイベント ハンドラーの名前は、クラス名に対応しています。 たとえば、 Sheet2 クラスでは、 Startup イベント ハンドラーの名前は Sheet2_Startupです。 ThisWorkbook クラスでは、Startup イベント ハンドラーの名前は ThisWorkbook_Startup です。

private void Sheet1_Startup(object sender, System.EventArgs e)
{
}

private void Sheet1_Shutdown(object sender, System.EventArgs e)
{
}

ドキュメントレベルの Excel プロジェクト内のイベントの順序

Excel プロジェクト内の Startup イベント ハンドラーは、次の順序で呼び出されます。

  1. ThisWorkbook_Startup=

  2. Sheet1_Startup=

  3. Sheet2_Startup=

  4. Sheet3_Startup=

  5. 順にその他のシート。

    ブック ソリューション内の Shutdown イベント ハンドラーは、次の順序で呼び出されます。

  6. ThisWorkbook_Shutdown=

  7. Sheet1_Shutdown=

  8. Sheet2_Shutdown=

  9. Sheet3_Shutdown=

  10. 順にその他のシート。

    順序は、プロジェクトがコンパイルされるときに決定されます。 ユーザーが実行時にシートを再配置した場合、次にブックが開くまたは閉じるときにイベントが発生する順序は変更されません。

VSTO アドイン プロジェクト

Visual Studio により、VSTO アドインで生成されたコードが提供されます。このコードにより、2 つの異なるイベント StartupShutdown が発生します。

Startup イベント

Startup イベントは、VSTO アドインが読み込まれ、アセンブリ内のすべての初期化コードが実行された後に発生します。 このイベントは、生成されたコード ファイル内の ThisAddIn_Startup メソッドによって処理されます。

ThisAddIn_Startup イベント ハンドラー内のコードは、VSTO アドインが RequestComAddInAutomationService メソッドをオーバーライドしない限り、最初に実行されるユーザー コードです。 この場合、 ThisAddIn_Startup イベント ハンドラーが、 RequestComAddInAutomationServiceの後に呼び出されます。

コードでドキュメントを開く必要がある場合、ThisAdd-In_Startup イベント ハンドラーにコードを追加しないでください。 代わりに、ユーザーがドキュメントを作成するとき、または開くときに Office アプリケーションが発生させるイベントにそのコードを追加します。 詳細については、「Office アプリケーションの起動時にドキュメントにアクセスする」を参照してください。

VSTO アドインの起動順序の詳細については、「VSTO アドインのアーキテクチャ」を参照してください。

Shutdown イベント

Shutdown イベントは、コードが読み込まれるアプリケーション ドメインがアンロードされるときに発生します。 このイベントは、生成されたコード ファイル内の ThisAddIn_Shutdown メソッドによって処理されます。 このイベント ハンドラーは、VSTO アドインがアンロードされるときに最後に実行されるユーザー コードです。

Outlook VSTO アドインの Shutdown イベント

Shutdown イベントは、ユーザーが Outlook の COM アドイン ダイアログ ボックスを使用して、VSTO アドインを無効にした場合にのみ発生します。 Outlook の終了時には発生しません。 Outlook の終了時に実行する必要のあるコードがある場合は、次のいずれかのイベントを処理します。

Note

レジストリを変更して終了する場合、Outlook が Shutdown イベントを発生させるように強制することができます。 ただし、管理者がこの設定を元に戻す場合、 ThisAddIn_Shutdown メソッドに追加したコードは Outlook の終了時に実行されなくなります。 詳細については、「Outlook 2010 のシャットダウンの変更」を参照してください。