このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】ユーザーフォームはどこへ消えた?

VBAのユーザーフォームですが、Showメソッドの引数にvbModelessを指定するとモードレス(※)で開くことができます。
※モードレスだとユーザーフォームを表示したまま、Excelで他の操作ができます。

モードレスだとユーザーフォームを開きっぱなしでExcel操作もできて便利です。

ただ、いつの間にかユーザーフォームが消えている時があって、なぜなのだろうと不思議に感じていました。

いつの間にかいなくなっているんですよね

長年の疑問だったのですが、簡単なコードを書いてみたところその理由を発見することができました。

どんな検証をしたのかお話したいと思います。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

ユーザーフォームはいつ消えたのか

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を最小化すると消える仕様だったようです。

いつの間にかユーザーフォームが消えたな、と思ったらこの仕様を思い返してください。

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

created by Rinker
技術評論社
¥3,608 (2024/11/21 14:41:17時点 Amazon調べ-詳細)
VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい