Office プロジェクトのイベント
各 Office プロジェクト テンプレートは、自動的に複数のイベント ハンドラーを生成します。ドキュメント レベルのカスタマイズとアプリケーション レベルのアドインでは、イベント ハンドラーが少し異なります。
対象: このトピックの情報は、Office 2013 および Office 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
ドキュメント レベルのプロジェクト
Visual Studio は、ドキュメント レベルのカスタマイズで、新規または既存のドキュメントまたはワークシートの分離コードを生成します。このコードにより、Startup および Shutdown という 2 つの異なるイベントが発生します。
スタートアップ イベント
Startup イベントは、ドキュメントが実行され、アセンブリ内のすべての初期化コードが実行された後に、各ホスト項目 (ドキュメント、ブック、またはワークシート) に対して発生します。これは、実行中のクラスのコンストラクター内で最後に実行されます。ホスト項目の詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
ドキュメント レベルのプロジェクトを作成すると、生成されたコード ファイル内に、Visual Studio によって Startup イベントのイベント ハンドラーが作成されます。
Microsoft Office Word プロジェクトでは、イベント ハンドラーの名前は ThisDocument_Startup です。
Microsoft Office Excel プロジェクトでは、イベント ハンドラーの名前は次のようになります。
Sheet1_Startup
Sheet2_Startup
Sheet3_Startup
ThisWorkbook_Startup
シャットダウン イベント
Shutdown イベントは、コードが読み込まれているアプリケーション ドメインがアンロードされるときに、各ホスト項目 (ドキュメントまたはワークシート) に対して発生します。これは、アンロード時にクラス内で最後に呼び出されます。
ドキュメント レベルのプロジェクトを作成すると、生成されたコード ファイル内に、Visual Studio によって Shutdown イベントのイベント ハンドラーが作成されます。
Microsoft Office Word プロジェクトでは、イベント ハンドラーの名前は ThisDocument_Shutdown です。
Microsoft Office Excel プロジェクトでは、イベント ハンドラーの名前は次のようになります。
Sheet1_Shutdown
Sheet2_Shutdown
Sheet3_Shutdown
ThisWorkbook_Shutdown
[!メモ]
ドキュメントの Shutdown イベント ハンドラーでは、コントロールをプログラムで削除しないでください。Shutdown イベントが発生すると、ドキュメントの UI 要素は使用できなくなります。アプリケーションが終了する前にコントロールを削除する場合は、BeforeClose や BeforeSave などの別のイベント ハンドラーにコードを追加してください。
イベント ハンドラーのメソッド宣言
各イベント ハンドラーのメソッド宣言には、sender および e の同じ引数が渡されます。Excel では、sender 引数は Sheet1 または Sheet2 などのシートを参照します。Word では、sender 引数は、ドキュメントを参照します。e 引数はイベントの標準引数を参照しますが、この場合は使用されていません。
次のコード例は、Word のドキュメント レベルのプロジェクトに含まれる既定のイベント ハンドラーを示しています。
Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Startup
End Sub
Private Sub ThisDocument_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Shutdown
End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
}
private void ThisDocument_Shutdown(object sender, System.EventArgs e)
{
}
次のコード例は、Excel のドキュメント レベルのプロジェクトに含まれる既定のイベント ハンドラーを示しています。
[!メモ]
次のコード例は、Sheet1 クラスのイベント ハンドラーを示しています。他のホスト項目クラスでは、イベント ハンドラーの名前はクラス名に対応します。たとえば、Sheet2 クラスでは、Startup イベント ハンドラーの名前は Sheet2_Startup です。ThisWorkbook クラスでは、Startup イベント ハンドラーの名前は ThisWorkbook_Startup となります。
Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Startup
End Sub
Private Sub Sheet1_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Shutdown
End Sub
private void Sheet1_Startup(object sender, System.EventArgs e)
{
}
private void Sheet1_Shutdown(object sender, System.EventArgs e)
{
}
ドキュメント レベルの Excel プロジェクトのイベントの順序
Excel プロジェクト内の Startup イベント ハンドラーは、次の順序で呼び出されます。
ThisWorkbook_Startup.
Sheet1_Startup.
Sheet2_Startup.
Sheet3_Startup.
その他のシート (シートの順)
ブック ソリューション内の Shutdown イベント ハンドラーは、次の順序で呼び出されます。
ThisWorkbook_Shutdown.
Sheet1_Shutdown.
Sheet2_Shutdown.
Sheet3_Shutdown.
その他のシート (シートの順)
この順序は、プロジェクトのコンパイル時に決定されます。ユーザーが実行時にシートの並び順を変更した場合でも、次にブックを開いたとき、またはブックを閉じたときのイベントの呼び出し順序は変わりません。
アプリケーション レベルのプロジェクト
Visual Studio によって、アプリケーション レベルのアドインのコードが生成されます。このコードにより、Startup および Shutdown という 2 つの異なるイベントが発生します。
スタートアップ イベント
アドインが読み込まれ、アセンブリ内のすべての初期化コードが実行された後に、Startup イベントが発生します。このイベントは、生成されたコード ファイル内の ThisAddIn_Startup メソッドによって処理されます。
ThisAddIn_Startup イベント ハンドラーのコードは、アドインが RequestComAddInAutomationService メソッドをオーバーライドしていない限り、最初に実行されるユーザー コードです。その場合、ThisAddIn_Startup イベント ハンドラーは RequestComAddInAutomationService の後に呼び出されます。
コードでは、文書が開く必要がある場合は ThisAdd-In_Startup のイベント ハンドラーにコードを追加しないでください。代わりに、userがドキュメントを作成するか開くと、Officeアプリケーションが発生させるイベントにコードを追加します。詳細については、「ドキュメントにアクセスするときのOfficeアプリケーションの起動」を参照してください。
アドインの起動処理の詳細については、「アプリケーション レベルのアドインのアーキテクチャ」を参照してください。
シャットダウン イベント
Shutdown イベントは、コードが読み込まれているアプリケーション ドメインをアンロードするときに発生します。このイベントは、生成されたコード ファイル内の ThisAddIn_Shutdown メソッドによって処理されます。このイベント ハンドラーは、アドインがアンロードされるときに最後に実行されるユーザー コードです。
OutlookアドインのシャットダウンEvent
Shutdown のイベントは、userがOutlookでCOMアドイン ダイアログ ボックスを使用してアドインを無効にした場合にのみ発生します。Outlook の終了時には、発生しません。Outlook の終了時にコードを実行する必要がある場合は、次のどちらかのイベントを処理します。
Application オブジェクトの Quit イベント。
[!メモ]
レジストリを変更することで、Outlook の終了時に Shutdown イベントを強制的に発生させることができます。ただし、管理者がこの設定を元に戻した場合、ThisAddIn_Shutdown メソッドに追加したコードは Outlook の終了時に実行されなくなります。詳細については、「Outlook 2010 でのシャットダウンの変更」を参照してください。
参照
処理手順
方法: Visual Studio で Office プロジェクトを作成する