HOME > 即効テクニック > Excel VBA > ウィンドウ操作関連のテクニック > 自動的に閉じるメッセージボックス

即効テクニック

ウィンドウ操作関連のテクニック

自動的に閉じるメッセージボックス

(Excel 97/2000/2002/2003/2007)

画面にメッセージを表示するにはMsgBox関数を使います。次のコードは、[はい]ボタンと[いいえ]ボタンのあるメッセージボックスを表示します。

Sub Sample()
    MsgBox "保存しますか?", vbYesNo + vbQuestion
End Sub

とても便利で手軽なMsgBox関数ですが、このメッセージボックスはユーザーが操作するまで表示され続けるという特性があります。もちろん、ユーザーに重要な情報を伝えるという点からは、何らかのアクションを受け取るまで表示し続けることも重要ですが、ときには一定の時間が来たら自動的にメッセージボックスを閉じて欲しい場合もあります。

残念ながらExcel VBAには自動的にメッセージボックスを閉じる機能がありません。 しかし、Windows Script Host(WSH)という機能を利用すれば実現可能です。ここでは、VBAから操作する例をお見せしましょう。

WSHを使うにはCreateObject関数でWSHへの参照を作らなければなりません。WSHでメッセージボックスを表示する命令はPopupメソッドです。Popupメソッドの構文は次の通りです。

WSH.Popup(strText,[nSecondsToWait],[strTitle],[nType]) strText … メッセージボックスに表示する文字列。必ず指定します nSecondsToWait … メッセージボックスを閉じるまでの時間。省略可能 strTitle … メッセージボックスのタイトル。省略可能 nType … アイコンやボタンの種類。省略可能 次のコードは、5秒で閉じるメッセージボックスを表示します。
Sub Sample()
    Dim WSH As Object
    Set WSH = CreateObject("Wscript.Shell")
    WSH.Popup "5秒後、自動的に閉じます", 5, "確認", vbYesNo + vbInformation
    Set WSH = Nothing
End Sub

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

引数nTypeには次の数値を指定できます。 0 [OK]ボタンを表示します 1 [OK]ボタンと [キャンセル]ボタンを表示します 2 [中止]ボタン、[再試行]ボタン、および [無視]ボタンを表示します 3 [はい]ボタン、[いいえ]ボタン、および [キャンセル]ボタンを表示します 4 [はい]ボタンと [いいえ]ボタンを表示します 5 [再試行]ボタンと [キャンセル]ボタンを表示します 16 [Stop]アイコンを表示します 32 [?]アイコンを表示します 48 [!]アイコンを表示します 64 [i]アイコンを表示します これらの数値は、VBAのMsgBox関数で使用できるvbYesNoやvbQuestionなどの定数にも同じ値が割り当てられています。

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

1 [OK]ボタン 2 [キャンセル]ボタン 3 [中止]ボタン 4 [再試行]ボタン 5 [無視]ボタン 6 [はい]ボタン 7 [いいえ]ボタン これらの数値も、MsgBox関数の定数と同じです。また、指定した時間が経過して自動的にメッセージボックスが閉じたときは、-1が返ります。
Sub Sample()
    Dim WSH As Object, re As Long
    Set WSH = CreateObject("Wscript.Shell")
    re = WSH.Popup("保存しますか?", 5, "5秒後に閉じます", _
                                            vbYesNo + vbQuestion)
    Set WSH = Nothing
    If re = vbYes Then ActiveWorkbook.Save
End Sub