2022/06/13

メッセージボックスでユーザーの意思を吸い上げる

プログラムの途中で、ユーザーの意思を簡単に吸い上げるにはMsgBoxを使用するのが簡単です。構文は以下の通りです。
MsgBox Prompt [,Buttons] [, Title]
(MsgBoxには第4・第5引数もあります。但しヘルプに関する指定のため今回は省略しています。)

第一引数だけを指定すると、第二引数(Buttons)は既定値のゼロとなるため「OKボタン」しか出ず、またダイアログのタイトルも既定の「Microsoft Excel」となります。ボタンは「OKのみ」なので確認のみになります。

第二引数には、下記の図1~図7の4種類を組合せて設定することが出来ます。図3(アイコンのスタイル)と図7(メッセージ ボックスのモダリティ)はボタン関係とは言えませんが、併せて設定可能です。

表示されるボタンの数と種類
定数内容
vbOKOnly0[OK] ボタンのみを表示
vbOKCancel1[OK] ボタンと [キャンセル] ボタンを表示
vbAbortRetryIgnore2[中止]、[再試行]、[無視] の各ボタンを表示
vbYesNoCancel3[はい]、[いいえ]、[キャンセル] の各ボタンを表示
vbYesNo4[はい] ボタンと [いいえ] ボタンを表示
vbRetryCancel5[再試行] ボタンと [キャンセル] ボタンを表示
図1


図1の定数を変えると、ボタンの種類・数は図2のように変わります。
ボタンの数と種類
図2


アイコンのスタイル
定数内容
vbCritical16[重大なメッセージ] アイコンを表示
vbQuestion32[警告クエリ] アイコンを表示
vbExclamation48[警告メッセージ] アイコンを表示
vbInformation64[情報メッセージ] アイコンを表示
図3


図3の定数を変えると、コメントの前に付くアイコンが図4のように変わります。
アイコンのスタイル
図4


既定のボタン
定数内容
vbDefaultButton101 番目のボタンが既定
vbDefaultButton22562 番目のボタンが既定
vbDefaultButton35123 番目のボタンが既定
vbDefaultButton47684 番目のボタンが既定
図5


図5の定数を変えると、既定のボタン(そのままEnterキーを押した時に実行されるボタン)が図6のように変わります。但し、表示されるボタンの数以上の定数を設定すると、「ゼロ(1 番目のボタンが既定)」の設定となるようです。
既定ボタンの設定
図6


メッセージボックスを操作するまで、どこのアプリまで停止させるかを設定するのが図7ですが、試してみると「システムモーダル(vbSystemModal)」を使っても他のアプリの操作は可能です。但し、メッセージボックスが「常に最表面に表示」されます。
メッセージ ボックスのモダリティ
定数内容
vbApplicationModal0アプリケーション モーダル
応答するまでは現在のアプリケーション作業が中断
vbSystemModal4096システム モーダル
応答するまでは全てのアプリケーションが中断
図7


メッセージボックスの設定は以上ですが、ユーザーが「どのボタンをクリックしたか」がMsgBoxとしての戻り値になります。戻り値の一覧が図8になります。
定数内容
vbOK1OK
vbCancel2Cancel
vbAbort3中止
vbRetry4再試行
vbIgnore5無視
vbYes6はい
vbNo7いいえ
図8


MsgBox関数を使った例が図9になります。
  1. Sub its002_01()
  2.  Dim Ans As VbMsgBoxResult   '←MsgBoxでの返答
  3.  Ans = MsgBox("あなたはExcelが好きですか?", vbYesNo + vbQuestion)
  4.  If Ans = vbYes Then
  5.   MsgBox "ほっとしています", vbInformation
  6.  Else
  7.   MsgBox "そうですかぁ・・", vbCritical
  8.  End If
  9. End Sub
図9


02行目で、MsgBoxの戻り値を受取る変数Ansのデータ型を「VbMsgBoxResult型」として宣言していますが、このMsgBox専用の型を使うことで、入力支援としてコード入力時に「列挙体のメンバが表示され、選択式になる」ので、効率良く、又ミスが少なくプログラミングできます。

アプリ実例

ExcelからAccessデータベースを作成・操作
Accessデータベースを使用した売上台帳