はじめに
VBAのユーザーフォームを閉じる際、Unload
ステートメントと .Hide
メソッドという、よく似た2つの方法があるのをご存知でしょうか?
どちらもフォームを画面から消すという点では同じですが、メモリ上の扱いやフォームの状態において、明確な違いがあります。この違いを理解しないまま使うと、「フォームに入力したはずの値が消えてしまった!」といった予期せぬ挙動の原因になります。
この記事では、Unload
と Hide
のそれぞれの意味と、具体的な使い分けについて、分かりやすく解説します。
Unload
: フォームを完全に終了させる
Unload
は、ユーザーフォームをメモリから完全に破棄(解放)する命令です。
特徴
- フォームインスタンスが完全に終了します。
- フォーム上のテキストボックスやコンボボックスに入力された値は、すべて初期状態にリセットされます。
- 次に同じフォームを表示するときは、全く新しい状態で表示されます。
どんなときに使う?
フォームでの作業が完全に終了し、入力内容を保持する必要がない場合に適しています。「OK」ボタンや「閉じる」ボタンのように、処理を完結させるときに使うのが一般的です。
サンプルコード
' --- MainFormという名前のユーザーフォームを想定 ---
' 「閉じる」ボタン(CloseButton)がクリックされたときの処理
Private Sub CloseButton_Click()
' フォームをメモリから完全にアンロードする
Unload MainForm
End Sub
.Hide
: フォームを一時的に非表示にする
.Hide
は、ユーザーフォームを画面上で見えなくするだけで、メモリ上には存在し続けます。
特徴
- フォームはメモリ上に保持されたまま、非表示になるだけです。
- フォーム上のテキストボックスなどに入力された値は、そのまま保持されます。
- 次に
.Show
メソッドで再表示すると、前回の状態のまま表示されます。
どんなときに使う?
フォームでの入力作業の途中で、一時的にExcelシートの操作をしたい場合などに適しています。「一時的に隠す」ボタンや、マルチステップのフォームで前の画面に戻る際などに便利です。
サンプルコード
' --- MainFormという名前のユーザーフォームを想定 ---
' 「一時的に隠す」ボタン(HideButton)がクリックされたときの処理
Private Sub HideButton_Click()
' フォームを非表示にするだけ(値は保持される)
MainForm.Hide
End Sub
' フォームを再表示するためのマクロ(標準モジュールに記述)
Sub ReShowForm()
' 非表示になっているフォームを再表示
MainForm.Show
End Sub
Unload
と Hide
の使い分けまとめ
項目 | Unload | .Hide |
目的 | 完全に終了させる | 一時的に非表示にする |
メモリ | 解放される | 保持される |
入力値 | 破棄される(リセット) | 保持される |
主な用途 | OK, 閉じる, キャンセル | シート操作, 一時退避 |
基本的には、フォームの役目が完全に終わったときは Unload
を使い、明確な意図がない限り .Hide
は使わない方が、意図しない値の保持を防ぎ、メモリ管理の観点からも安全です。
まとめ
今回は、ユーザーフォームを閉じるための Unload
と .Hide
という2つの方法の違いについて解説しました。
Unload
: 全てをリセットして完全に終了。.Hide
: 状態を維持したまま一時的に隠す。
この2つの違いを正しく理解し、場面に応じて適切に使い分けることで、より安定的でユーザーフレンドリーなVBAツールを作成することができます。