メッセージボックスでユーザーの意思を吸い上げる
プログラムの途中で、ユーザーの意思を簡単に吸い上げるにはMsgBoxを使用するのが簡単です。構文は以下の通りです。MsgBox Prompt [,Buttons] [, Title]
(MsgBoxには第4・第5引数もあります。但しヘルプに関する指定のため今回は省略しています。)
第一引数だけを指定すると、第二引数(Buttons)は既定値のゼロとなるため「OKボタン」しか出ず、またダイアログのタイトルも既定の「Microsoft Excel」となります。ボタンは「OKのみ」なので確認のみになります。
第二引数には、下記の図1~図7の4種類を組合せて設定することが出来ます。図3(アイコンのスタイル)と図7(メッセージ ボックスのモダリティ)はボタン関係とは言えませんが、併せて設定可能です。
定数 | 値 | 内容 |
---|---|---|
vbOKOnly | 0 | [OK] ボタンのみを表示 |
vbOKCancel | 1 | [OK] ボタンと [キャンセル] ボタンを表示 |
vbAbortRetryIgnore | 2 | [中止]、[再試行]、[無視] の各ボタンを表示 |
vbYesNoCancel | 3 | [はい]、[いいえ]、[キャンセル] の各ボタンを表示 |
vbYesNo | 4 | [はい] ボタンと [いいえ] ボタンを表示 |
vbRetryCancel | 5 | [再試行] ボタンと [キャンセル] ボタンを表示 |
図1の定数を変えると、ボタンの種類・数は図2のように変わります。
図2
定数 | 値 | 内容 |
---|---|---|
vbCritical | 16 | [重大なメッセージ] アイコンを表示 |
vbQuestion | 32 | [警告クエリ] アイコンを表示 |
vbExclamation | 48 | [警告メッセージ] アイコンを表示 |
vbInformation | 64 | [情報メッセージ] アイコンを表示 |
図3の定数を変えると、コメントの前に付くアイコンが図4のように変わります。
図4
定数 | 値 | 内容 |
---|---|---|
vbDefaultButton1 | 0 | 1 番目のボタンが既定 |
vbDefaultButton2 | 256 | 2 番目のボタンが既定 |
vbDefaultButton3 | 512 | 3 番目のボタンが既定 |
vbDefaultButton4 | 768 | 4 番目のボタンが既定 |
図5の定数を変えると、既定のボタン(そのままEnterキーを押した時に実行されるボタン)が図6のように変わります。但し、表示されるボタンの数以上の定数を設定すると、「ゼロ(1 番目のボタンが既定)」の設定となるようです。
図6
メッセージボックスを操作するまで、どこのアプリまで停止させるかを設定するのが図7ですが、試してみると「システムモーダル(vbSystemModal)」を使っても他のアプリの操作は可能です。但し、メッセージボックスが「常に最表面に表示」されます。
定数 | 値 | 内容 |
---|---|---|
vbApplicationModal | 0 | アプリケーション モーダル 応答するまでは現在のアプリケーション作業が中断 |
vbSystemModal | 4096 | システム モーダル 応答するまでは全てのアプリケーションが中断 |
メッセージボックスの設定は以上ですが、ユーザーが「どのボタンをクリックしたか」がMsgBoxとしての戻り値になります。戻り値の一覧が図8になります。
定数 | 値 | 内容 |
---|---|---|
vbOK | 1 | OK |
vbCancel | 2 | Cancel |
vbAbort | 3 | 中止 |
vbRetry | 4 | 再試行 |
vbIgnore | 5 | 無視 |
vbYes | 6 | はい |
vbNo | 7 | いいえ |
MsgBox関数を使った例が図9になります。
- Sub its002_01()
- Dim Ans As VbMsgBoxResult '←MsgBoxでの返答
- Ans = MsgBox("あなたはExcelが好きですか?", vbYesNo + vbQuestion)
- If Ans = vbYes Then
- MsgBox "ほっとしています", vbInformation
- Else
- MsgBox "そうですかぁ・・", vbCritical
- End If
- End Sub
02行目で、MsgBoxの戻り値を受取る変数Ansのデータ型を「VbMsgBoxResult型」として宣言していますが、このMsgBox専用の型を使うことで、入力支援としてコード入力時に「列挙体のメンバが表示され、選択式になる」ので、効率良く、又ミスが少なくプログラミングできます。
アプリ実例
「ExcelからAccessデータベースを作成・操作」「Accessデータベースを使用した売上台帳」