何かと便利なMsgBox関数の使い方、アレンジ方法の記事です。
関数なので、押したボタンによって戻り値を取得することが可能です。この戻り値を使って分岐処理するところまで解説します。
成果物
MsgBox関数の使い方
Msgbox(Prompt,Buttons,Title,Helpfile,Context)
※Prompt以外は省略可能
メッセージの表示(Prompt)
MsgBox”hello”と打ったコードを実行すれば、
MsgBox (“hello”)でもOKです。
※Chr(10)またはVBLfがラインフィード、Chr(13)またはvbCrがキャリッジリターンで、どちらも改行する時に使うコードです。昔は両方まとめて行わないと改行できなかったので二種類ありますが、この場合どっちか片方でOKです。
ボタン、アイコンの種類などを変更(Buttons)
ボタンを変更
たとえばMsgBox prompt:=”test”, Buttons:=vbOKCancelとしてやれば、
vbOKCancelの代わりにButtons:=1としても同じ結果になります。
押したボタンによって処理を振り分ける方法については後述します。
| 定数 | 値 | 内容 |
|---|---|---|
| vbOKOnly | 0 | OKボタンを表示 |
| vbOKCancel | 1 | OK、キャンセルボタンを表示 |
| vbAbortRetryIgnore | 2 | 中止、再試行、無視ボタンを表示 |
| vbYesNoCancel | 3 | はい、いいえ、キャンセルボタンを表示 |
| vbYesNo | 4 | はい、いいえボタンを表示 |
| vbRetryCancel | 5 | 再試行、キャンセルボタンを表示 |
アイコンを変更
MsgBox prompt:=”test”, Buttons:=vbCriticalと入力して実行すると、このように警告アイコンが表示されます。
vbCriticalの代わりにButtons:=16と入力しても同様の結果になります。
| 定数 | 値 | 内容 |
|---|---|---|
| vbCritical | 16 | 警告アイコンを表示 |
| vbQuestion | 32 | 問い合わせアイコンを表示 |
| vbExclamation | 48 | 注意アイコンを表示 |
| vbInformation | 64 | 情報アイコンを表示 |
ボタンもアイコンも変更
以下の引数も同様の方法で同時に実行可能です。
標準ボタンを変更
通常であれば一番左のボタンが選択されていますが、この規定の状態はButtons:=vbDefaultButton1(数字で言うと0)に当たります。
もしボタンが2種類しかないのに3番目や4番目のボタンを標準ボタンに指定した場合、1番目のボタンが標準ボタンになります。
| 定数 | 値 | 内容 |
|---|---|---|
| vbDefaultButton1 | 0 | 1番目のボタンを標準ボタンに設定 |
| vbDefaultButton2 | 256 | 2番目のボタンを標準ボタンに設定 |
| vbDefaultButton3 | 512 | 3番目のボタンを標準ボタンに設定 |
| vbDefaultButton4 | 768 | 4番目のボタンを標準ボタンに設定 |
モーダルを変更
Excel以外のアプリケーションは操作可能です(アプリケーションモーダル)。
| 定数 | 値 | 内容 |
|---|---|---|
| vbApplicationModal | 0 | アプリケーションモーダル |
| vbSystemModal | 4096 | システムモーダル |
ヘルプボタンの表示
| 定数 | 値 | 内容 |
|---|---|---|
| vbMsgBoxHelpButton | 16384 | ヘルプボタンを表示 |
その他
| 定数 | 値 | 内容 |
|---|---|---|
| vbMsgBoxSetForeground | 65536 | メッセージを最前面に表示 |
| vbMsgBoxRight | 524288 | メッセージを右寄せで表示 |
| vbMsgBoxRtlReading | 1048576 | メッセージを右から左に表示(ヘブライ語、アラビア語) |
タイトルを変更(Title)
ヘルプファイル(HelpFile,Context)
私の環境(64bit Windows10)だと再現できなかったんですが、調べた感じHelpFileにヘルプファイルのパス、Contextにページ番号を指定すれば、ヘルプを押した時にヘルプファイルのそのページが表示されるようです。Windows10だと拡張子hlpはサポート外なので、PC内に転がってたchmでテストしました。
HelpFileとContextはセットで設定しないとエラーになります。
htmlやpdfでテストしてもうまく開きませんでした。
押したボタンによって処理を振り分ける
この場合answer = MsgBox(prompt:=”test”, Buttons:=vbYesNoCancel)という文になります。
' vba
Dim answer As Integer
answer = MsgBox(prompt:="test", Buttons:=vbYesNoCancel)
Select Case answer
' 「はい」を押した場合
Case vbYes
MsgBox "「はい」が押されました"
' 「いいえ」を押した場合
Case vbNo
MsgBox "「いいえ」が押されました"
' 「キャンセル」を押した場合
' ※Case Elseでも可
Case vbCancel
MsgBox "「キャンセル」が押されました"
End Select
| 定数 | 値 | 内容 |
|---|---|---|
| vbOK | 1 | 「OK」ボタン |
| vbCancel | 2 | 「キャンセル」ボタン |
| vbAbort | 3 | 「中止」ボタン |
| vbRetry | 4 | 「再試行」ボタン |
| vbIgnore | 5 | 「無視」ボタン |
| vbYes | 6 | 「はい」ボタン | vbNo | 7 | 「いいえ」ボタン |

コメント