【VBA】ユーザーフォームはどこへ消えた?
VBAのユーザーフォームですが、Showメソッドの引数にvbModelessを指定するとモードレス(※)で開くことができます。
※モードレスだとユーザーフォームを表示したまま、Excelで他の操作ができます。
モードレスだとユーザーフォームを開きっぱなしでExcel操作もできて便利です。
ただ、いつの間にかユーザーフォームが消えている時があって、なぜなのだろうと不思議に感じていました。
いつの間にかいなくなっているんですよね
長年の疑問だったのですが、簡単なコードを書いてみたところその理由を発見することができました。
どんな検証をしたのかお話したいと思います。
ユーザーフォームはいつ消えたのか
Sub Main()
' 標準モジュールのプログラム
Dim uf As UserForm1
Set uf = New UserForm1
uf.Show vbModeless ' モードレスで表示
Set uf = Nothing
End Sub
ユーザーフォームをモードレスで表示するときは、標準モジュールにこのようなプログラムを書きます。
割と一般的なやり方だと思います。
Private Sub UserForm_Terminate()
' ユーザーフォームのプログラム
MsgBox "ユーザーフォームが終わります", vbInformation
End Sub
そして、ユーザーフォームがいつ消えたか特定するため、ユーザーフォーム側にこのコードを追加しました。
これはUserForm_Terminateという、ユーザーフォームが終わるときに発生するイベント動作です。
×ボタンを押したときなど、ユーザーフォームが終わる前に実行されます。
このコードでは、ユーザーフォームが終わる前にメッセージボックスを表示するようにしました。
そして、このコードを追加して試していたところ、衝撃的な事実を発見します。
Excelを最小化すると、ユーザーフォームが終わる!?
Excelを最小化すると、メッセージボックスが表示されるのですよ。
全く気にしたことがなかったのですが、ユーザーフォームはExcelを最小化すると消える仕様だったようです。
いつの間にかユーザーフォームが消えたな、と思ったらこの仕様を思い返してください。