クエリを開いたときにMsgBox関数でメッセージを表示する

 メッセージボックスの表示は通常の場合VBAでやりますが、フォームやレポート上のテキストボックスにMsgBox関数を書き込んで(フォームビューや印刷プレビューに切り替えたときに)メッセージを表示させることもできます。一方、クエリのフィールドにMsgBox関数を記しても通常はエラーとなりうまくいきません。
 ダミーのパラメータでもいいような気もしますが、どうしてもメッセージボックスにしたい場合になんとかする方法について示します。

 まず試しに、クエリデザインの画面でMsgBox関数を含む列を置いてみます。


 しかし、これをデータシートビューで開こうとするとエラーとなります。


 一つの対応として、MsgBox関数を文字列にしてEval関数で評価する形にしてみます。具体的には次のような列を設けます。

   メッセージ: Eval("MsgBox('このクエリは10秒以内に閉じないと爆発します')")


 データシートビューで開くと、(画面が切り替わる前にですが)確かにメッセージが表示されました。


 しかし、クエリに戻り値が表示されてしまい、あまり好ましくありません。かといってクエリデザインで列の「表示」のチェックを外すとメッセージボックスも表示されなくなってしまいます。


 そこで右のようにしてみます。値が1である列を設け、「表示」のチェックを外したうえで、抽出条件の欄に次のように記します(上記から列名の定義部分を除いただけです)。

   Eval("MsgBox('このクエリは10秒以内に閉じないと爆発します')")

このEval関数の戻り値(つまりMsgBox関数の戻り値)は1なので抽出条件は必ず真となり、つまりもとのクエリの実行結果に影響しません。もしMsgBoxの引数を変えていろいろなボタンを置くと(そうする必要性は考えにくいですが)戻り値も変わってしまいますが、その場合はEval関数の後ろに「Or True」と加えれば必ず真になります。
 ちなみに、このクエリを一度閉じて開きなおすとAccessの最適化により列名の定義(右の例でいえば「ダミー:」の部分)が省略され単に「1」という列になります。


 データシートビューで開くとメッセージボックスが表示されます。


 そして、今度は余分な列も表示されません。