HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理

ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理|Excel VBA

ユーザーフォーム関連のテクニック

ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理

(Excel 2002/2003/2007/2010)

ユーザーフォーム入門 - 住所入力フォームを作成する(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

次回は、いよいよ最終回です。
ユーザーフォームを起動する処理を作成していきましょう。