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