UserForm に関することを色々と勉強してきましたが、肝心な UserForm の表示や終了の部分を詳しく解説していませんでした。今回は UserFrom の表示/閉じるについて勉強していきましょう。
説明を省略していましたが、ここで UserForm の表示方法と終了する方法についてきちんと勉強しておきましょうましょう(^^)/
そういえば UserForm の表示や終了方法を正式に勉強していませんでしたね。
Show で表示することはわかっていますけど、その他にどんなものがあるのか、よろしくお願いしますm(__)m
【この記事でわかることは】
・UserForm を表示する方法がわかります
・UserForm を閉じる方法がわかります
前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ
Excelブックの起動時にマクロを自動実行させるWorkbook_OpenイベントとAuto_Openプロシージャの違いとそれぞれの使用方法を解説しています。是非こちらもあわせてご覧ください(^^)/
UserForm を表示する方法
・UserForm を表示するには UserFormオブジェクトの Show メソッドで設定します。
Showメソッド と Loadステートメント
Show メソッド
【構文】[object ].Show modal (引数 modal には次の定数を指定できます)
・objectには、開く UserForm を指定します。
定数 | 値 | 説明 |
---|---|---|
vbModal (既定値) | 1 | UserFormを閉じるまでExcel内の他の部分は使用できません |
vbModeless | 0 | UserFormを表示した状態でExcel内の他の部分を使用できます |
・InitializeイベントやClickイベントなどのイベントから表示させることが一般的です。
Sub sample01()
MsgBox "UserForm1をモダールで開きます!"
UserForm1.Show vbModal
UserForm1.Show vbModeless
MsgBox "UserForm1をモードレスで開きました!"
End Sub
・最初は「vbModal」モダールで開きます。
・次は「vbModeless」モードレスで開きます。
Load ステートメント
・Loadステートメントは、UserFormをメモリに読み込みます。
【構文】Load objec (objectには、読み込む UserForm を指定します)
・実は、事前にメモリにロードされていないまま Showメソッドで UserForm を表示する場合、自動的にメモリにロードされているんです。
・Loadステートメントを単独で使う場合は、UserForm上のプロパティを参照したり設定しようとする場合です。Showメソッドで表示される前に設定を整えておく必要がある場合などには、メモリに Loadする必要があります。
'Userform起動(Losd後Captionを変更して表示する)
Sub sample02()
Dim Res As String
Load UserForm1
MsgBox "UserForm1をロードしました!"
Res = InputBox("フォームのタイトルを入力してください!")
UserForm1.Caption = Res
UserForm1.Show
End Sub
・上の例では、Load 後に UserForm の Caption を入力変更してから表示します。
UserForm を閉じる方法
・UserForm を閉じる方法で一番簡単なのは、右上の「×」ボタンで閉じる方法です。
・もちろんVBAを操作して閉じることも可能です。
・UserForm を閉じると、UserForm がメモリ上から削除されてしまいます。同時に UserForm 上で設定取得していた情報などはすべて破棄されてしまいます。この点を考慮していく必要がありますので注意してください。
UnLoad ステートメント
・UnLoadステートメントは、メモリに読み込んだ UserForm をメモリから解放します。
【構文】UnLoad objec (objectは、閉じる UserForm を指定します)
'UserFormを閉じる際にメッセージを表示する
Sub UnLoadSample()
UnLoad UserForm1
MsgBox "UserForm1をアンロードしました!"
End Sub
UserForm が閉じる際のイベント
・UserForm が閉じらる際のイベントを二つ紹介しておきます。
・発生順に QueryClose イベントと Terminate イベントの二つです。
QueryClose イベント
・UserForm が閉じられようとする直前で発生するイベントです。
・VBAで Unload Me されたり、フォーム右上の「x」ボタンを押した時に発生します。
【構文】Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
指定項目 | 説明 |
---|---|
Cancel | 0 以外の値に設定すると、QueryCloseイベントが停止されます。 |
CloseMode | QueryCloseイベントの発生原因を示す値または定数です。 |
・CloseMode 引数は、次の値を返します。
定数 | 値 | 説明 |
---|---|---|
vbFormControlMenu | 0 | UserForm の コントロール メニューで [閉じる] コマンドを選択しました。 |
vbFormCode | 1 | コードから Unload ステートメントが呼び出されます。 |
vbAppWindows | 2 | 現在の Windows オペレーティング環境セッションが 終了しようとしています。 |
vbAppTaskManager | 3 | Windows タスク マネージャー がアプリケーションを 閉じようとしています。 |
・QueryClose には引数「Cancel」があります。
・引数「Cancel」に「0」以外を指定することでこのイベントをキャンセルすることができます。
・UserForm を閉じようとするときに確認してから閉じたい場合に引数「Cancel」を使います。
「×」ボタンでは閉ないようにするコード
'「×」ボタンの場合は閉ないようにする
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "[×]ボタンでは閉じられません!", vbExclamation
Cancel = 1 '0以外では終了しない
End If
End Sub
・「Cancel」への代入は、False が 0 なので True(=1)としてもいいでしょう。
Terminate イベント
オブジェクトを参照するすべての変数が Nothing に設定され、オブジェクトのインスタンスへの参照がメモリからすべて削除されるか、オブジェクトへの最後の参照がスコープ外になったときに発生します。【参照先】https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/terminate-event-visual-basic-for-applications
・こんな感じで使えます。UserForm が存在していないことが確認できます。
'UserFormが閉じたらUserFormをカウントしてみる
Private Sub UserForm_Terminate()
Dim n As Long
n = UserForms.Count
MsgBox "開かれているUserFormは " & n & " 個です!"
End Sub
・このイベントで UserForm のプロパティや入力値や処理結果を取得することはできません。
メモリから解放された後に発生するイベントだから当然ですよね(^^ゞ
・以上で大体わかっていただけたと思うので終了します。
まとめ(おわりに)
・いかがでしたでしょうか?
・記事内で使用したコードのサンプルファイルを登録していますのでご利用ください!
・今までの記事のサンプルも登録していますのでよろしければお使いください(^^)
まとめと感想など
UserForm の表示と終了について、かなり理解が深まりました(^^♪ どの場所やタイミングで何を実行するのか、ちゃんと考えないといけないこともわかりました。
UserForm の表示/終了だけでも結構奥が深いですよね。表示の部分の関してはもう少し知っておいた方が良いことがあります。次回は表示位置について勉強しましょう(^^)/
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/
記事のサンプルファイルをダウンロードできます
今回の記事のサンプルをダウンロードできるようリンク先に登録しています!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
【今回わかったことは】
・UserForm を表示する方法と閉じる方法がわかりました
・終了時に発生するイベントについてもわかりました