<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>ということで百人一首
  1 2 3 4 5 6 7 8 9



■次の「読み札」を表示させるためのコマンドボタン

さあ、ここからが本番ですよ。
このままじゃ、何番の歌かばればれなので、こういう構造のフォームにした意味がありません。
ここから目指すことは、

   ・上の句を、順番に表示させるようにする
   ・下の句のどれかをクリックするとかすると、正解か不正解か判定されるようにする
   ・詠み終わった句は、下の句の一覧からはずす
   ・上の句が、1句ずつ、ランダムに表示される

これくらいはがんばらないとならなそうですよね。

んじゃ、ひとつずつがんばってみましょうか。
サブフォームを埋め込んだ形にしたので、ここから先は、ちょっと作業がややこしくなりますが、なるべく分かりやすく書いていきますのでがんばってトライしてみてくださいね。

まず、ひとつめの課題。
[上の句用]のフォームで、「レコード移動ボタン」を非表示にしちゃったので、次の歌を表示させたくても身動きが取れません。
そこで、次のレコードに移動するボタンを作ろうかな、と思います。

[上の句用]フォームを、デザインビューで開いてください。

小さいコマンドボタンを作って、そいつをクリックしたら次の句を表示するようにしようかなと思うんですけど・・・。
適当なところに、コマンドボタンをひとつ作りましょう。
大きさや、標題プロパティを整えてください。

標題は・・・そうだな、「次の句」とか「パス」とか、そんなんでいいと思います。


で、このボタンのイベントプロパティで「クリック時」というところをクリックしてください。
このボタンをクリックしたらどうなるのか、という「動き」を作ります。

プロパティをクリックすると、右側に、ボタンが出てきますよね。
一番右端の「ビルドボタン」をクリックします。



マクロでもいいんですが、マクロの方が多分難しいと思うんで、コードビルダを選んでください。
何か、新しいウィンドウが開いて出てきたと思います。

ここで拒否反応起こしてはいけません。
こういう処理を作るときは、多分、マクロよりコードの方が簡単です。
ほんとうに楽をしたかったら、コードを書くようになさる方がよいと思いますよ。
なぜなら・・・必ず「エラー」が起こるので、エラー処理を考えなくちゃいけないから、です。
エラーが起きたときどうすればいいか、なんてことをマクロでやろうとすると、かなり難しいですからね・・・。


カーソルがピカピカしているところに、docmd.と半角英字で入力します。
最後の「半角のドット」を入力すると、なにやらリストが出てくると思います。

そう、これは、マクロのアクションの一覧です。マクロのアクションをVBAで書くと、こういう書き方になるのです。
なんてことを言い出すと「あああそんなむずかしいことはわたしにはできない」などと思い込んでしまう方がいらっしゃるかもしれませんので説明しないで先に進みます。思い込むのは皆さんの自由ですが、そうそう「初心者なのでわからない」と勝手に一線を引かれてはお話のしようがなくて、悲しいです。そういう人とはなるべくお話したくないなぁと思っちゃいます。とにかく一度挑戦してみてください。

一覧から選んでもいいんですが、ここはもう直接、gotorecord と半角英字で入力しちまってください。

そのあと、半角のスペースを入力します。
すると、こんなふうに↓なにやらにぎやかな表示になると思います。

こうなったら、続けて、半角のカンマを2回打ちます。

そしたら、キーボードの下矢印キーを何回か押して、acNext  というやつを選びます。

選べたら、キーボードのTabキーを押しましょう。

これで完成です。
キーボードの下矢印キーを1回押せば、にぎやかな表示も消えると思います。

これは、マクロの「レコードの移動」アクションで、アクションの引数を「次のレコード」に設定したのと同じ動作をするコードです。
なので、これだけだったら、マクロでもいいんです。
どぉぉうしてもマクロがいい、という方は、そういうマクロを自力で作ってみてください。

では、このウィンドウだけ、閉じましょう。
またフォームの方に戻ります。



フォームビューに切り替えて、コマンドボタンをクリックしてみてください。変わります???

そのままずっとクリックし続けてください。
クリックがめんどくさければ、上の図のように、コマンドボタンが選択されている状態(フォーカスが当たってる状態、なんていう言い方をしますが、点線で囲まれて少し線が濃くなっている状態のこと)なら、Enterキーを押し続けてもいいと思います。

このテーブルには、100件だけレコードが入ってますよね。
100番目の句を表示した後、さらに「次のレコードへ移動」という命令を下すと、こんなメッセージが出ます。

当たり前のメッセージなんですけど、うっかりクリックし続けたがためにこんなメッセージが出てぎょっとするのもなんだなぁという場合は(エラーが出てもかまわないという人はこのままでいいんですけども)、「エラーが出たらどうするか」ということを考えます。

多分、このボタンをクリックし続けたときに出るエラーは、このエラーくらいなもんじゃないかなと思うんで、とにかくなんかエラーが出たら無視するようにしちゃおうと思います。
上のメッセージの「デバッグ」というボタンをクリックしましょう。



こんな状態になってると思います。

「ここでエラーになりました」ということで、黄色くなってると思います。
このままじゃいけないので(実はまだ、処理続行中なんですよ、これって)、処理を止めます。ツールバーの「リセット」ボタンをクリックします。

黄色くなくなると思います。
そしたら・・・。

まあ、ちょっとした決まり文句なんですけど、↑「エラーになったら次の処理に行け」という命令文を、一番上に入れておきます。

これで、エラー自体は起こっているんですけど、表示したり止まったりせず、次の処理に進む(次つっても一行しか処理がないので、結局のところ何もしないで終わり、ってことになるんですけども)っていう状況になります。
コードが書けたら、再び、このウィンドウだけ閉じましょう。

このコードは、自作の「次のレコードへ移動ボタン」なんかを作りたいときとか、応用できると思います。



んでは、[上の句用]のフォームを保存しながら閉じて、一息入れましょう。

そしたら、全体を見渡してみましょう。[百人一首フォーム]を開いて・・・
ありゃ、わたしはフォームを少し広げたので、こんなになっちゃいましたよ。
こりゃちょっと広げないといかんですね。

上の句のフォームの部分を少し広げて、調節してみました。

こんな感じ・・・。

コマンドボタン、ちゃんと機能します?
いちおう、最後の句まで表示させて、問題ないかどうか確認をしておいてくださいね。