Excelマクロのお勉強。
WorkbookやFormといったオブジェクトにデフォルトで備わっているプロシージャ(メソッド)って、どんな順番で呼び出されるのよ?って思ったので調べてみた。
今更だけど・・・
ちなみにバージョンは2003。
- ブックを開いたとき(起動時)
-
Workbook_Open
Workbook_Activate
Workbook_WindowActivate - ブックを閉じるとき(終了時)
-
Workbook_BeforeClose
Workbook_WindowDeactivate
Workbook_Deactivate - フォームロードしたとき
- UserForm_Initialize
- フォーム.Showしたとき
-
UserForm_Layout
UserForm_Activate - フォーム.Hideしたとき
- なし
- フォームアンロードしたとき
-
UserForm_QueryClose
UserForm_Terminate
※ブックをVisible=FalseにしたときはActivateプロシージャは走らないと思うので、基本はOpenプロシージャに処理を書く。
※起動時と同様。
QueryCloseとTerminateの違いは何?って思ったけど、QueryCloseはアンロードの起動処理で、Terminateはホントのアンロード処理という感じ。
つまり、アンロードの起動処理なのでアンロードするかどうかプロシージャ内で分岐できるのがQueryClose。CancelパラメータにTrueを設定するとアンロードを中止できる。
QueryCloseで何事もなければTerminateプロシージャが呼び出されて、アンロード処理の記載ができるようだ。