自動的に閉じるMsgBox


画面にメッセージを表示するにはMsgBox関数を使います。たとえば次のコードは、画面に「田中亨」という文字列を表示します。

Sub Sample()
    MsgBox "田中亨"
End Sub

画面には[OK]ボタン付きのメッセージボックスが表示されます。

このメッセージボックスは、ユーザーが[OK]ボタンをクリックするまで、ずっと表示され続けます。では、指定した時間が経過したら自動的に閉じるようなメッセージボックスを表示するにはどうしたらいいでしょう?

残念ながらExcelのVBAには、そうした便利な関数は用意されていません。もしどうしても自動的に閉じるメッセージボックスを表示したいのでしたら、Windows Scripting Host(WSH)を使いましょう。WSHのPopupメソッドで表示したメッセージボックスは、指定した時間が経過すると自動的に閉じます。次のサンルは、表示したメッセージボックスを5秒後に閉じます。

Sub Sample2()
    Dim WSH As Object
    Set WSH = CreateObject("WScript.Shell")
    WSH.Popup "5秒後、自動的に閉じます", 5, "Title", vbInformation
    Set WSH = Nothing
End Sub

Popupメソッドの構文は次の通りです。

WSH.Popup(strText,[nSecondsToWait],[strTitle],[nType])
引数名 意味
strText メッセージボックスに表示する文字列。必ず指定します
nSecondsToWait メッセージボックスを閉じるまでの時間。省略可能
strTitle メッセージボックスのタイトル。省略可能
nType アイコンやボタンの種類。省略可能

引数nSecondsToWaitで指定した時間が来る前にユーザーがボタンを操作すれば、いつでもメッセージボックスを閉じることができます。

引数nTypeには次の数値を指定できます。

数値 VBAの定数 意味
0 vbOKOnly [OK]ボタンを表示します
1 vbOKCancel [OK]ボタンと[キャンセル]ボタンを表示します
2 vbAbortRetryIgnore [中止]ボタン、[再試行]ボタン、および[無視]ボタンを表示します
3 vbYesNoCancel [はい]ボタン、[いいえ]ボタン、および[キャンセル]ボタンを表示します
4 vbYesNo [はい]ボタンと[いいえ]ボタンを表示します
5 vbRetryCancel [再試行]ボタンと[キャンセル]ボタンを表示します
16 vbCritical
32 vbQuestion
48 vbExclamation
64 vbInformation

これらの数値は、VBAのMsgBox関数で使用できるvbYesNoやvbQuestionなどの定数にも同じ値が割り当てられています。

Popupメソッドで表示したメッセージボックスで、どのボタンがクリックされたかを調べるのもMsgBox関数と同じです。クリックされたボタンに応じて、それぞれ次の数値が返ります。

数値 VBAの定数 クリックされたボタン
1 vbOK [OK]ボタン
2 vbCancel [キャンセル]ボタン
3 vbAbort [中止]ボタン
4 vbRetry [再試行]ボタン
5 vbIgnore [無視]ボタン
6 vbYes [はい]ボタン
7 vbNo [いいえ]ボタン

これらの数値も、MsgBox関数の定数と同じです。また、指定した時間が経過して自動的にメッセージボックスが閉じたときは、-1が返ります。