はじめに
ユーザーフォームを閉じる閉じる場合は、Unloadを使って閉じたいオブジェクト(ユーザーフォーム)を指定します。一方、終了せずに表示を消しておく事もできます。この場合は、Hideメソッドを使用します。
両者の違いは、Unloadがメモリーから解放して終了するのに対して、Hideは表示を消しているだけなのでユーザーフォーム上のテキストボックスなどの値はそのまま保持されています。
以下のようなユーザーフォームを作成して動作を検証してみましょう。

検証プログラム
最初にユーザーフォームを作っていきます。上の図のようにユーザーフォームを作って、テキストボックスとコマンドボタンを2つ配置します。
ユーザーフォームモジュールには以下のようにボタンのプログラムを記述します。

次に標準モジュールにユーザーフォームを起動するプログラムを書きます。

今回は、ユーザーフォームをモードレスにして開いてみました。モーダルで開く場合は、vbModeless を省略します。モーダルの場合は、ユーザーフォームが終了しないとExcel上での処理は出来なくなります。
※モーダル、モードレスのプロパティは、UserForm1のプロパティウインドウからも設定できます。
ユーザーフォームを起動するには、以下のようにユーザーフォームオブジェクトのShowメソッドを使います。
Sub OpenUserForm()
'ユーザーフォームを表示
UserForm1.Show vbModeless 'モードレスで開く
End Sub
このコードをExcel上のボタンにマクロ登録しておきます。
ユーザーフォームを閉じる
コマンドボタン1には、ユーザーフォームを閉じる処理を記述しています。
'Closeボタンを押した
Private Sub CommandButton1_Click()
Unload Me
End Sub
Unload オブジェクト
とすれば、オブジェクトで指定したユーザーフォームを閉じる事ができます。Meというのは自分自身。つまりここではUserForm1を指しており、自分自身を終了せよという命令になります。
ユーザーフォームを隠す
コマンドボタン2には、ユーザーフォームを隠す処理を記述します。
'Hideボタンを押した
Private Sub CommandButton2_Click()
Me.Hide
End Sub
オブジェクト.Hide
とすれば、オブジェクトの表示を消す事ができます。この時、終了する場合と違いユーザーフォーム上の情報は残っています。
再度、ユーザーフォームを開きたい場合は、UserForm1.Show で表示できます。
動作確認
プログラムが完成したらExcel上の「ユーザーフォームを開く」ボタンを押してユーザーフォームを起動します。
テキストボックスに何か入力して、「Close」ボタンを押し、再度ユーザーフォームを開いてみるとテキストボックスは初期化されて空白になります。
テキストボックスに何か入力して「Hide」ボタンを押した場合、再度ユーザーフォームを開くと値がそのまま残っているのが確認できると思います。

このようにユーザーフォーム上の値を保持しておきたい場合は、Hideを使って表示のみを消しておく事ができます。また再度表示させたい場合は、Showメソッドを使います。
尚、ユーザーフォームが表示されているかを確認するには、Visibleプロパティを確認します。Visibleプロパティは、読み込み専用です。ちなみに、ユーザーフォームが開いていない状態で、Unload や Hide を使ってもエラーは出ないようです。
Sub UserFormVisible()
If UserForm1.Visible Then
MsgBox "表示されている"
Else
MsgBox "表示されていない"
End If
End Sub
コメント