Accessでフォームを作成し、ユーザーとの対話型処理をする際に、メッセージボックスを表示させる方法があります。特に、ユーザーからの回答の結果を受けてその後の処理を分岐させる等の機能を設けることは、データベース運用において必要なテクニックの一つです。
今回は、Accessフォームでメッセージを表示する方法を紹介します。
MsgBox関数について
Accessではメッセージボックスを表示させるためにMsgBox関数が用意されています。
基本式は以下のように表現されます。
MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])
prompt: ダイアログ ボックスにメッセージとして表示される文字列式です。半角で1024文字まで使用でき、vbCrLfを用いて改行することも可能です。(省略不可)
buttons: 表示させるボタンの数と種類、使用するアイコンのスタイル等を指定します。(省略可能)
title: ダイアログボックスのタイトルバーに表示される文字列式です。(省略可能)
helpfile, context: ダイアログボックスに状況依存のヘルプを提供するときに使用するヘルプファイルを指定します。helpfileを用いる場合は、contextも必ず指定します。(省略可能)
ここで、特に重要となる引数は「buttons」になるかと思います。一覧として以下に示します。
表1 ボタンの種類
定数 | 値 | 内容 |
vbOKOnly | 0 | [OK] ボタンのみを表示します。 |
vbOKCancel | 1 | [OK] ボタンと [キャンセル] ボタンを表示します。 |
vbAbortRetryIgnore | 2 | [中止]、[再試行]、[無視] の各ボタンを表示します。 |
vbYesNoCancel | 3 | [はい]、[いいえ]、[キャンセル] の各ボタンを表示します。 |
vbYesNo | 4 | [はい] ボタンと [いいえ] ボタンを表示します。 |
vbRetryCancel | 5 | [再試行] ボタンと [キャンセル] ボタンを表示します。 |
次に、メッセージボックスに表示するアイコンの種類については以下のとおりとなります。
表2 アイコンの種類
定数 | 値 | 内容 |
vbCritical | 16 | [重大なメッセージ] アイコンを表示します。 |
vbQuestion | 32 | [警告クエリ] アイコンを表示します。 |
vbExclamation | 48 | [警告メッセージ] アイコンを表示します。 |
vbInformation | 64 | [情報メッセージ] アイコンを表示します。 |
続いて、標準ボタンの設定方法です。
表3 標準ボタンの種類
定数 | 値 | 内容 |
vbDefaultButton1 | 0 | 1 番目のボタンが既定です。 |
vbDefaultButton2 | 256 | 2 番目のボタンが既定です。 |
vbDefaultButton3 | 512 | 3 番目のボタンが既定です。 |
vbDefaultButton4 | 768 | 4 番目のボタンが既定です。 |
また、あまり使う機会はないかもしれませんが、モーダル(他への操作をできなくするような処理のこと)を設定することもできます。
表4 モーダルの種類
定数 | 値 | 内容 |
vbApplicationModal | 0 | アプリケーション モーダル。現在のアプリケーションでの作業を続行するには、ユーザーはメッセージ ボックスに応答する必要があります。 |
vbSystemModal | 4096 | システム モーダル。ユーザーがメッセージ ボックスに応答するまで、すべてのアプリケーションが中断します。 |
その他としては以下のとおりです。
表5 その他の種類
定数 | 値 | 内容 |
vbMsgBoxHelpButton | 16384 | メッセージ ボックスに [ヘルプ] ボタンを追加します。 |
vbMsgBoxSetForeground | 65536 | [メッセージ ボックス] ウィンドウを前景ウィンドウとして指定します。 |
vbMsgBoxRight | 524288 | テキストを右揃えにします。 |
vbMsgBoxRtlReading | 1048576 | ヘブライ語とアラビア語のシステムでテキストが右から左に読む形式で表示されるように指定します。 |
続いて、表1で示した各ボタンの戻り値を表6に示します。
表6 MsgBoxの戻り値
定数 | 値 | 内容 |
vbOK | 1 | OK |
vbCancel | 2 | Cancel |
vbAbort | 3 | 中止 |
vbRetry | 4 | 再試行 |
vbIgnore | 5 | 無視 |
vbYes | 6 | はい |
vbNo | 7 | いいえ |
実は、戻り値は非常に重要なパラメータになります。特に、「vbYes」や「vbNo」は分岐条件の際に多用しますので、是非ここでその内容を知っていただけると良いかと思います。
ここまでで、基本的なMsgBox関数について紹介してきましたので、次からは具体的な使用方法について見ていきましょう。
MsgBox関数の活用: If文との組み合わせ
それでは、さっそくMsgBox関数の活用方法として、If文との組み合わせを見ていきましょう。
まずは、以下のコードを標準モジュールに作成していきます。
Public Sub MsgBox_Func() '単純なメッセージ表示 MsgBox "これからIf文で処理を分岐させます。", vbOKOnly 'メッセージボックスの選択結果を受けてIf文で処理を分岐させる。 'vbCrLfで改行をしている。 If MsgBox("「はい」か「いいえ」を" & vbCrLf & "選んでください。", vbYesNo + vbQuestion, "If文との組み合わせ") = vbYes Then'イミディエイトウィンドウにメッセージを表示する。
Debug.Print "メッセージボックスで「Yes」が選択されました。"
Else'イミディエイトウィンドウにメッセージを表示する。
Debug.Print "メッセージボックスで「No」が選択されました。"
End If End Sub
作成した様子を図1に示します。
実装後、作成したプロシージャを画面上の「▶」アイコンをクリックして実行しましょう。
最初の処理は、単純なメッセージボックスを表示するための方法です。ここで「buttons」引数を「vbOKOnly」にしているため、メッセージは「OK」ボタンのみが表示されます。また、「title」引数は未指定のため、「Microsoft Access」という表記になります。
実際に表示されるメッセージボックスを図2に示します。
次の処理では、MsgBox関数とIf文を用いて分岐をさせています。ここで、MsgBox関数では「prompt」引数で「vbCrLf」を用いてメッセージを改行させています。メッセージが長くなる場合は可読性を高めるために、「vbCrLf」を上手く活用すると良いかと思います。
「buttons」引数では、「vbYesNo」と「vbQuestion」を「+」で繋いでいます。これにより「問い合わせアイコン」が表示され、ボタンは「はい」と「いいえ」が表示されるようになりました。
ここで、「+」を用いることに違和感を持たれる方がいるかもしれません。つまり、それぞれを「+」で繋いだ場合に足し算により誤認識しないかという点です。先に紹介したとおり、各定数には数値が割り当てられており、「vbYesNo」の場合は「4」が、「vbQuestion」の場合は「32」となります。これらの値を足した場合は「36」となりますが、これに該当する定数はありませんので、自動的に、「vbYesNo」と「vbQuestion」が割り当てられていると判断されメッセージボックスにそれぞれ定数に対する結果が反映されます。これは、他の定数同士の和でも同じことが言えます。そのため、「+」で繋ぐことに問題がないのです。
「vbYesNo」のボタンで「はい」を選択した場合は「vbYes」が、「いいえ」を選択した場合は「vbNo」がそれぞれ戻り値として返されます。
If文では、MsgBox関数の戻り値の結果として「vbYes」をTrueとした場合と、そうでない場合(「vbNo」が返された場合)の「False」での処理に分岐をさせ、それぞれの結果としてイミディエイトウィンドウにテキストを表示させる処理を加えています。
このように、MsgBox関数を活用することでユーザーとの対話型処理を実装することができます。
まとめ
今回は、MsgBox関数について基本的な使用方法と、その活用方法の例を紹介しました。特に、Accessフォームを作成しユーザーにデータを入力してもらうようになると、条件を分岐させて処理をする機会が増えてきますが、そのような際にMsgBox関数を上手く利用していただけると良いかと思います。
スポンサーリンク
コメント