<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > ソノイチ_2



PublicプロシージャでMsgBox

前の章で作ったのが、フォームのデザインビューから作り進むタイプの「Privateプロシージャ」です。
つまり、このフォーム専用の、このフォームのこのボタンをクリックするときだけ動かす処理を作るときの手順、というわけですね。

今度は、「メッセージボックスを出す」という処理をやるPublicプロシージャを作成してみましょう。
やってることは同じなので、たいして意味はないんですが、Privateプロシージャと、作り方の手順がどんな風に違うか、ご覧いただきたいと思います。
ついでですので、MsgBox関数の使い方などについても、もう少し探求してみましょう。
ほんとはね、MsgBoxなんか出すためだけのプロシージャなんて、わざわざ作らんですよ。
今日は、雰囲気掴むためだけなので、作り方というか段取りだけ見てってください。そのうち本格的なの作りますからネ。

もし、VBEのウィンドウがまだあいていたら、一度閉じておいてください。
開いたままでもいいんですけれども、閉じた状態からはじめたほうが雰囲気をつかんでいただきやすいと思うので・・・。

Publicプロシージャは、モジュールというオブジェクトの中にこしらえます。
モジュールを新規作成しましょう。他のオブジェクトと同じように、ふつうに、データベースウィンドウから新規に作成してください。

そうすると、何とも味気ない感じで、VBEのウィンドウが開いてくると思います。

これがモジュール↑です。
といっても、モジュールっていうのは、MS-Accessの場合は、プロシージャを入れておく入れ物みたいなもんなので、これ作ったところで何かできるわけではないんです。この中に、プロシージャを作成することになります。

ではでは、左上のツールボタンから、「プロシージャ」を選びましょう。

Functionプロシージャ作りますので、Functionプロシージャのところをクリックし、プロシージャ名をなんか入力します。
Subプロシージャでもいいんですが、ちょいと「プロシージャっぽい雰囲気」を味わってみようかな、と・・・Functionプロシージャを選んどいてくださいね。

プロシージャ名は漢字やひらがなでもいけますが、プロシージャ名に限っては、半角英数字だけで作ったほうがよいでしょう。
いちおうこれでも、プログラム言語ですからね。ここに書いたものはそのまま、コンピュータとのやり取りに使われるわけですから、漢字とかひらがなとかいわゆる「全角文字」というやつは、必要最低限に抑えておいたほうがよいと思います。
メッセージボックスに表示したいメッセージとか、プロシージャの中でテキストとしてひらがなや漢字を使うのはぜんぜん問題ナシですけれど、やっぱプロシージャ名ともなると、ちょっとお話が違ってくると思うんですよ。

さてさて、なんか、それっぽい感じになってきましたね。これがプロシージャの正体です。

さっきとちがって、プロシージャ名は、皆さんご自身がつけたものですよね。
Public Function から End Function までが、aaaaaというプロシージャでやること、ということになるのです。
この2行の間に、何かしら命令文を記入していきます。

この2行↑も、どう書けばいいか分かってるのであれば、自分で直接書いたっていいんですよ。
でも、慣れるまでは、手順を踏んで進めていったほうがいいと思います。きちんとした手順で作業を進めれば、この2行はMS-Accessが正しく書いてくれるもん、と思っといてください。

じゃあ、この間に、MsgBox関数を書きます。さっきとおんなじでもいいんですけど、ちょっと違うメッセージボックスを出してみます?
MsgBox関数のヘルプを見てみましょう。VBEのウィンドウの右上に、空白のコンボボックスがあると思います。

ここにキーワードを入れて↑Enterキーを押すと、関係ありそうなヘルプ項目を出してくれます。
(思うようなのが出てこないこともありますが、相手はコンピュータなので広い心で接してください)

MsgBox関数という項目が出てきたら、クリックしてみましょう。

この関数は、マクロの「メッセージボックス」アクションとは、ちょっと意味合いが違うんですが、まあ、メッセージボックスを出すのに使える関数ということになります。
関数というのは、関数名だけ入力してもちゃんと動かなくて、「なにをどうする」みたいな補助情報が必要になります。
こういう補助情報のことを「引数」と言います。

引数の入力の仕方などは関数によってまちまちなので、何か関数を使わなくちゃならなくなったとき、ヘルプで確認する必要があるわけなんです。
何か、わかりやすい関数解説本を手元に置いておくのもいいかもしれないですけれどもね。でも、基本はヘルプですよ。なぜならヘルプは、MS-Accessの開発元の会社が作成している文章だからです。読みにくかろうが読む気がなかろうが、調べものの原点はヘルプですからね・・・。必ずチェックするようにしましょう。これ読んで「わかんねー」と思った後、関数解説本を調べれば、きっと理解度2倍になりますよ。ええ。
炎天下での重労働の後のビールは格段にうまいでしょ?



さてさて、MsgBox関数の解説に戻りますが、書き方のサンプルのところを見ると、

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

こんなふうに書いてあります。ヒエーいったいどういう意味なんでしょう???

これは、MsgBoxという関数名の後に、この順番で、カンマで区切りながら引数の入力をすれば、そのとおりにメッセージボックスを出してあげてもよくってよ、という意味です。引数の解説は、ヘルプの中にずらっと載っていますよね。

MsgBox関数は非常に単純な構造なので、詳しく読まなくても使えないことはないんですが、関数によってはけっこう複雑なものもありますから、ヘルプの読み方にも慣れておいたほうがよいですね。ポイントは、「式?文字列?」「必須?任意?」というところでしょうか。。。
引数の中には「文字列として指定します」みたいな説明になっているものもあります。こう書いてある場合はたいてい、半角のダブルコーテーションで囲みます。「式を入力します」というような説明になっているものは、囲まずそのまま入力します。ダブルコーテーションで囲むことには意味があるんですが、これは徐々に慣れていきましょう。
「必須」と「任意」はよいですよね。言葉のとおりです。

じゃ、ちょっと入力してみましょうか。ヘルプを閉じて、VBEのウィンドウに戻ります。
Msgbox と入力した後、半角スペースをひとつあけると、お助けポップアップが表示されますね。

まず、Prompt部分を、半角のダブルコーテーションで囲むようにして入力します。これが、いわゆる「メッセージ」ですね。
Prompt(1番目の引数)が入力できたら、半角のカンマを打ちます。
すると、2番目の引数のお助けリストが表示されます。

これ、ボタンの種類をあらわすキーワードなんですけどね。ずーっと下にスクロールしてって、VbYesNoというのを探してみてください。
探し当てることができたら、Tabキーを押します。
で、3番目の引数の入力に取り掛かります。

3番目は、メッセージボックスのタイトルバー部分に表示したい文字列を、やっぱしダブルコーテーションで囲って入力します。
タイトルを変更する気がなかったら、とりあえず2番目の引数で入力は完了になるので、カンマを打たずに、Enterキーなり下矢印キーなり押して、その行の入力を完了します。

まあー・・・エラーになったり変なになっちゃったら消してやり直せばいいんですし、とにかく思い切って入力して、キー操作に慣れちゃってください。
あんまり細かいキー操作にこだわりすぎておっかなびっくりになってもいけませんもんね。
中途半端な状態で(カンマ打った後とかダブルコーテーションで閉じてない状態のときとか)Enterキーを押しちゃうと、「入力が不完全」と思われて、こんなエラーメッセージが出たりします。

こういうときは慌てずにOKボタンをクリックしてメッセージボックスを閉じ、入力しなおしすればよいのです。

入力できました???

入力が完了したら、いちおう、コンパイルしてみて・・・。
エラーにはならないですか?

ここまでできたら、プロシージャ作成作業は完了です。
でも、おっと、プロシージャの入れ物であるモジュールを保存しておかないといけないですね。
上書き保存のツールボタンをクリックしましょう。

最初は、必ずモジュール名を聞いてきます。
モジュールもオブジェクトの一種なので、ちゃんと名前をつけます。
名前はModule1でいいので(この名前が表に出ることはほとんどないので何でもいいです)、OKして保存しておきましょう。

保存できたら、VBEを閉じましょうか。開けたままでウィンドウを切り替えるだけでもいいんですけどね。まあ、今日は閉じましょう。



では、このプロシージャを使ってみましょう。前の章と同じく、コマンドボタンをクリックしたら・・・っていうタイミングで動かしてみましょうかね。
前の章で作ったフォームがまだ残ってれば、それ使ってください。
なければ、なんか新しくフォーム作ってください。ああ、もう、練習なので、なんでもいいですよ。フォームなら。

コマンドボタンを新しく作りましょうか。
で、このコマンドボタンの「クリック時」のイベントとして、さっきのaaaaaというプロシージャを動かします。
直接プロシージャ名を書けばいいんですけれども、慣れないうちは、右端のビルドボタンをクリックして、

式ビルダを開いて、

左端の「関数」のところをダブルクリックすると、今使ってるMDBファイルの名前のフォルダが出てきますよね。
「このMDBファイルの中に作られているプロシージャ」の一覧が見れるんです。ただし、Functionプロシージャだけ。
Functionプロシージャは、こうして式ビルダなどで参照することができるんです。

あります?モジュールを保存していないと、出てこないですよ。

プロシージャ名をダブルクリックして、OKボタンをクリックします。

これでOK↑。



で、フォームを保存しましょう。
一息入れて、フォームビューに切り替えます。

そして、コマンドボタンをクリック!すると???

メッセージボックスが出てきます???

ボタンがふたつでてきましたね。MsgBox関数の引数を変えましたからね。
え?どっちのボタンをクリックしても、何にも起こらないって?当たり前です。何も指示出してないじゃないですか。
相手はコンピュータなんですよ。気が利かないし言われたことしかできないし、アホなんですから、そんな期待をかけないように。
ボタンをふたつ以上出せるメッセージボックスの活用方法については、後のコーナーでお話します。

今回、PrivateとかPublicとかいう言葉を頻繁に申しましたが、普段はこういう言葉はあまり表に出さないです。
もちろん、きちんと区別がつくようにしておく必要はあると思いますけれど、わたしたちが意識して使い分けをするもんでもなさそうです。

  フォームやレポートにくっつくようにして、そのフォームやレポートの中だけの処理をやるプロシージャ Privateプロシージャ
  そのDBの中のフォームやレポートなどで、共通となる処理をやるプロシージャ Public

こんな感じです。
今回作ったFunctionプロシージャというのは、Subプロシージャと違って、「何か結果を返すプロシージャ」というものになります。
計算した結果とかを出したいときのプロシージャなので・・・。
なので、Functionプロシージャでメッセージボックスを出す、なんてことは、本当はやらないんです。
今回はあくまでも「段取りの練習」ということで。

こういうのを使いこなすのって、結局のところ「慣れ」だと思いません?
なんでVBAが「わからない」「難しい」って思っちゃうかっていうと、「足場が見えない」からじゃないかと思うんですよね。
だから、とにかく最初は何回も何回もいろんなプロシージャ作ってみて、段取りと、基本的な流れと、ありがちなパターンを習得してしまうのが一番かなーと思うんです。

ではではそんなわけで、次のコーナーからしばらく、フォームやレポート内で手軽に作れるPrivateプロシージャをいくつか作りながら、操作に慣れていくといたしましょう。