<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--マクロで[OK][Cancel]ボタンのあるメッセージボックスを使う



マクロに「メッセージボックス」っていうアクションがありますよね。

これ実行すると、いわゆるメッセージボックスっていうやつがぴょんと出てくるわけなんですけど・・・
たとえば、下のようなマクロを作って保存して、とりあえずどんな感じかテストするならびっくりマークツールボタンをクリックしてやります。


こんな感じで出てきます。↓これがメッセージボックスです。


これは、Windowsの中で共通して使われる「部品」みたいなものの一種で、大きさとかレイアウトとか、「できること」はある程度決まってるんです。
けど、基本的な仕組みを理解していただければ、いろいろ活用できるんですよ。

たとえば・・・マクロのアクションで出てくるメッセージボックスは、OKボタンが1個ですよね。
でも、ほんとは、メッセージボックスっていろんな種類があるんですよ。

【メッセージボックスの種類】

vbOKOnly 0 [OK] ボタンのみを表示します。
vbOKCancel 1 [OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore 2 [中止]、[再試行]、および[無視] の 3 つのボタンを表示します。
vbYesNoCancel 3 [はい]、[いいえ]、および [キャンセル]の 3 つのボタンを表示します。
vbYesNo 4 [はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel 5 [再試行] ボタンと [キャンセル]ボタンを表示します。
vbCritical 16 警告メッセージ アイコンを表示します。
vbQuestion 32 問い合わせメッセージ アイコンを表示します。
vbExclamation 48 注意メッセージ アイコンを表示します。
vbInformation 64 情報メッセージ アイコンを表示します。
vbDefaultButton1 0 第 1 ボタンを標準ボタンにします。
vbDefaultButton2 256 第 2 ボタンを標準ボタンにします。
vbDefaultButton3 512 第 3 ボタンを標準ボタンにします。
vbDefaultButton4 768 第 4 ボタンを標準ボタンにします。
vbApplicationModal 0 アプリケーション モーダルに設定します。
vbSystemModal 4096 システム モーダルに設定します。
vbMsgBoxHelpButton 16384 ヘルプ ボタンを追加します。
VbMsgBoxSetForeground 65536 最前面のウィンドウとして表示します。
vbMsgBoxRight 524288 テキストを右寄せで表示します。
vbMsgBoxRtlReading 1048576 テキストを、右から左の方向で表示します。

この表は、Access2000のヘルプから引っ張ってきました。
細かいことは、ヘルプでMsgBox関数というとこを見てください。多分、「MSGBOX」でキーワード検索すれば見つかると思います。



これは、VBAコードでコントロールするときに使う名前なんです。だからVBAで書かないとならないんですけど、マクロでもやろうと思えばできますよ。
ただし、この「メッセージボックス」アクションではちょっと無理なんで、先のMsgBox関数を使います。なので、ちょっとややっこしいかもしれません。できればゆっくり照らし合わせながら読んでいってくださいね。


まず、マクロには「条件分岐」という機能があります。

もし○だったら×を、それ以外は△をを出す、みたいな処理を作ることができるんです。いわゆるIf文ってやつですね。
マクロのツールバーに「条件」というツールボタンがありますのでクリックしてみましょう。

このボタンがへっこんでるときは、「条件」っていう欄が出てくるんです。もっかいクリックするとなくなります。
この「条件」ってとこに式を書いたりして、オッケーなら右側のアクションを実行する、オッケーじゃなければ次の行のアクションに進む、っていう処理を書くんです。普段はなんちゃらかんちゃらといろいろ処理を書くんですけど、ここにうまいこと「OKボタンとキャンセルボタンがあるメッセージボックスを出す」っていう感じの関数を書いてやるんですね。


予備知識です。
前に出てきたメッセージボックスの一覧表、もう一度見てみてください。数字がありますよね。

マクロの中では、vbOKcancelとかいう名前じゃなくて、数字の方を使うんです。

MsgBox関数というのは、他のコーナーでも何度かお話しているんで、もしかしたら既によくご存知の方もいらっしゃると思います。説明がダブっちゃうかもしれませんけど、使い方としては、

MsgBox(“メッセージの内容”,メッセージボックスの種類,”タイトル(あれば)”,ヘルプファイルを使用するなら指定)

って感じになります。
後ろの方は省略可能ですので今回は無視するとして、2番目の「メッセージボックスの種類」ってのがミソ。ふつうは(VBAで記述するときは)ここにメッセージボックスの名前をvbOKcancelとかって入力してやるんですけど、ここに数字を指定します。たとえば、vbOKcancelは1だから

MsgBox(“焼きそばパンとコーヒー牛乳ね”,1)

と入力します。

マクロを保存してから(上書き保存のツールボタンをクリックするだけでよいです)実行してみてください。
ボタンがふたつの↓メッセージボックスになりますよね。


こういうメッセージボックスを出したいだけなら、これでいいんですけど、そうじゃないですよね。だいたい。

OKボタンをクリックしたら別のフォームを開くとか、キャンセルボタンをクリックしたら別のメッセージボックスを出すとか、ここから処理が枝分かれして一方を選ぶようになるとき・・・ですよね。こういうメッセージボックス作るときって。
まあ、ただ作りたいって時もあるかもしれないですけど・・・。


メッセージボックスのコマンドボタンというのにも名前がついてるんです。
これもヘルプを参照すると乗ってますので、後で整理しておいてくださいね。

ボタン名 ボタンの標題
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]

つまり、「このメッセージボックスのOKボタンをクリック」という式は

MsgBox("焼きそばパンとコーヒー牛乳ね",1)=1

となります。

と、こうすると、最初に出てきたメッセージボックスのOKボタンを押したときだけ、次のメッセージボックスが出るようになります。
んじゃ、キャンセルボタンをクリックしたとき、別の処理に移るように・・・たとえば別のメッセージボックスを作ってみると・・・。

上書き保存してから、ためしにテスト実行してみてください。

ん〜出ることは出ますけど・・・なんか・・・OKボタンをクリックしたとき、メッセージボックスがふたつ次々出てきちゃいますね。
なんか足りないのかな。


マクロっていうのは、書かれたアクションをひとつひとつ順番に実行するものです。んだから、MSGBOX関数でOKボタンをクリックしようがキャンセルしようが、2行目の処理をやろうとするんですね。気が利かないですよねぇほんとに。それくらい気を回してくれてもよさそうなもんなのに。

そこで、2行目でマクロを止めるか(マクロの中止アクション)、2行目にも条件を入れるか、どっちかの方法を取ります。
じゃ、マクロを止めてみましょう。2行目にも同じ条件入れるって方法は、今回は無理そう。だって、メッセージボックスがまた出てきちゃうでしょう。
条件のとこには、MsgBox関数使ってますからね。こりゃまた別の機会にお話することができると思います。



2行目に1行挿入するか、2行目以降ちょいと書き直すとかして、「マクロの中止」っていうアクションを選んでみてください。

んでもって、「条件」のところ(上の図でいくと今カーソルのあるところ)に、半角のピリオドを3つ打ってください。
半角のピリオドって画面出みるとゴミみたいにちっちゃくてわかりにくいですけど、いちおう意味があるんですよ。これ。
「1行上の条件をそのまま引き継ぐ」って意味になります。

つまり一つ前の行の条件がまだ生きていることをあらわしてます。OKボタンをクリックした後、あれやってこれやってそれもやって・・・と、アクションが何行にもなる場合は、こうやって左端に…と打っておく必要があるんですね。

これで、最初のメッセージボックスのOKボタンををクリックした後「メッセージボックスを出して」「マクロを中止する」っていうふたつの動作をやってくれるんです。そこでマクロを抜けるので、3行目の「メッセージボックス」アクションは実行せず。反対に「キャンセルボタン」をクリックしたときは、条件が合わないから1行目と2行目はやんないで3行目の「メッセージボックス」だけ出します。

あとは処理の内容をじっくり考えて、「OKボタンをクリックしたときの処理を先に書くか」「キャンセルボタンをクリックしたときの処理を先に書くか」検討してみてください。


OKボタンクリックしたときにやることのほうが多いのであれば、先にキャンセルボタンクリックしたときやることを書いといた方が見やすいといえば見やすいかもしれないですね。

「マクロの中止」をやんなきゃなんないので・・・

MsgBox("焼きそばパンとコーヒー牛乳ね",1)=2

こうしておいて、メッセージボックスのメッセージ内容を書き換えておいた方が、もしかしたらわかりやすいかもしれません。
正しく動作すればオッケーです。この辺に別に決まりはないので、マクロの条件分岐の方法とあわせて、うまく活用していってくださいね。