ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理|Excel VBA |
「ユーザーフォーム入門 - 住所入力フォームを作成する(7) 〜 住所入力支援」に引き続き、ユーザーフォームの終了処理を作成します。
これまでは、ユーザーフォームの動作を確認した後、ユーザーフォーム右上の[×]ボタンで閉じていましたが、アプリケーションの完成に向けて[終了]ボタンからユーザーフォームを閉じるよう、処理を作成していきましょう。
ユーザーフォームを終了するには、フォームモジュール内に次のように記述します。
Unload Me
Unloadステートメントはオブジェクトをメモリ内から削除するステートメントです。
また、Meキーワードは自身のフォームを表します。
設計ウィンドウで[終了]ボタン(cmdShuuryo)をダブルクリックしてClickイベントプロシージャのひな形を作成し、次のコードを記述します。
'[終了]ボタンクリック時の処理
Private Sub cmdShuuryo_Click()
Unload Me
End Sub
[終了]ボタンのイベントプロシージャに終了処理を作成しても、ユーザーが[×]ボタンをクリックすると、終了処理を実行しないままユーザーフォームが閉じられてしまいます。それでは困ることもあるでしょう。そんなときは、[×]ボタンで閉じられないようにします。
ユーザーフォームの[×]ボタンは、APIを使って非表示にすることもできますが、ここではイベントプロシージャを使って、[×]ボタンで閉じる処理を無効にします。
[×]ボタンを無効にするには、UserFormのQueryCloseイベントを使用します。
フォームモジュールのオブジェクトボックスから"UserForm"を選択し、プロシージャボックスから"QueryClose"を選択して、イベントプロシージャの雛形を作成します。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
End Sub
イベントプロシージャの引数「CloseMode」にはフォームの終了状態が格納されます。
[×]ボタンによる終了状態は「vbFormControlMenu」です。
また、イベントプロシージャの引数「Cancel」に、Trueを代入すると、フォームの終了をキャンセルできます。
次のQueryCloseイベントのプロシージャは、[×]ボタンをクリックしても終了できないようにし、その他の方法で終了した場合は住所録を保存して閉じます。[Alt]+[F4]キーが押されたときも、[×]ボタンと同様に閉じる処理を無効にします。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Select Case CloseMode
'[×]ボタン、[Alt]+[F4]キーの時は閉じる処理をキャンセル
Case vbFormControlMenu
MsgBox "[終了]ボタンから終了してください"
Cancel = True
'[×]ボタン以外の終了時には住所録ファイルを保存して閉じる
Case Else
MsgBox "終了します"
Workbooks(BOOK_NAME).Close SaveChanges:=True
End Select
End Sub
次回は、いよいよ最終回です。
ユーザーフォームを起動する処理を作成していきましょう。