画面にメッセージを表示するには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が返ります。