![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--VBAの小屋>横のものを縦にする |
では・・・ちょいと動かしてみましょうか。
PCのパワーや、メモリやディスクの空き容量にもよりますけど、時間は結構かかると思います。3〜4分はかかるかも。
イミディトウィンドウを出して、プロシージャ名を入力して、Enterキーを押してください。
しばーらくの間、動きがないと思いますけど、しばーらくすると、カーソルが微妙に2行目に移動して明滅すると思います。そしたら処理完了です。
味気ないですけど、まだほんとにほんとに処理の部分しか作ってないですからね。
もし・・・
5分経っても10分経っても、一向にカーソルが2行目に移動しない・・・という場合は、おそらく・・・どっかコードの書き方に不備があって、永久ループにはまってるんじゃないでしょうか。
そういう場合は、Ctrl + Breakキーを押して、プロシージャを止めてください。
どうでしょう。「まつたけ2テーブル」、値が入ってきてますか???
ここまでうまくいったら、あとは今後の運用のことを考えないといけませんね。
これ、今回限りなんですかね・・・。
それとも、入力はExcelでやりたいけど集計とかその他の処理はAccessに持ってきてやりたい、なんてときは・・・。
毎月毎月、新しいデータがとどくのなら、このプロシージャを繰り返し実行すれば、「まつたけテーブル2」にどんどんレコードが追加されていきます。
でもそれじゃ困る場合は・・・。
「まつたけテーブル2」のレコードを全部削除してから、「まつたけテーブル」のレコードを書き出さないと、レコードが重複しちゃう、という場合もありますよね。
今回は、全件削除してから改めて「まつたけテーブル」から値を移してくるようにしてみましょうか。
では・・・これも、プロシージャの中で削除してもいいんですけど・・・今回は、あらかじめ下のような削除クエリを作って、これを実行するようにしましょうか。
で、このクエリを、DoCmdっていう命令文を使って動かします。
DoCmdってのは、マクロのアクションをVBAで書くときのお約束語です。「クエリを開く」というアクションをこれからやりますね。
じゃあ、改めて・・・イミディトウィンドウから、このプロシージャを実行します。2行目でいいですから、またプロシージャ名を入力してEnterキーを押してください。
と、アクションクエリですから、必ず確認メッセージが出ますよね。
多分、2回出てくると思うんですけど・・・まあ、これが出てくれば、削除クエリが動いてくれてるって証拠なんで、このまま「はい」のボタンをクリックしましょう。
で、もう一度テーブルの中を見てみて・・・。
中身が同じなら、成功、ってことですね。一旦全部削除して、もう一度同じ内容を書き写したんですから・・・。
これで、繰り返しの使用にも耐えられるってことですね。
ここまで確認できたら、削除クエリ動かすときの確認メッセージを非表示にしましょうか。いちいち出るのもなんですもんね。
上のように、SetWarningsというマクロアクション(メッセージの設定)で調節します。
でも、これ、いきなり非表示にはしないでくださいね。
正しく削除クエリが動作していることを確認してから、最後に、非表示にしてください。
忘れてました!保存をしましょう。
このプロシージャがおさまるのは、新しく作ったモジュールの中ですよね。「Module1」って適当な名前を付けてくれますんで、この名前でいいかな。
Module1にしておきましょうか。
さて、このプロシージャを、どうやって利用していくか、ということなんですけど・・・。
フォームの中のコマンドボタンをクリックしたときに実行できるようにしてみましょうか。
んじゃ、ちょっとばかり小細工をして・・・Functionプロシージャに書き換えましょう。
でもって、適当に無地フォームを作って・・・。
コマンドボタンを作ります。
で、↑クリック時のイベントのトコ、ですけど・・・。ビルドボタンをクリックしてください。
で、「式ビルダ」↓ってのを選んでみてください。
これって、普段はあまり使わないかもしれないですけど・・・ちょっとした式を作るとき結構便利だったりするんです。
一番左下の枠の中に、このデータベースの中で利用できるオブジェクトや関数の一覧が出るようになってるんですよ。
「関数」の下を覗いてみてください。
今作ったプロシージャが、参照できるようになってますよね。↑
これをダブルクリックすると、一番上の欄に、プロシージャ名が出てきます。
そしたら、OKボタンをクリックしましょう。
さて・・・いかがでしょう。いろいろ見てきましたけど・・・。
テーブルの中のデータを扱うVBAコードって、結構難しいですよね。
決して、VBAだと高度なことができる、のではなくて、自分で1からだんどりつけて処理を作っていくわけですから、こうやって無理やりな処理を作ったりもできる、って意味なんです。
わたしは、できるだけクエリやマクロで組み立てることができるようにして、足りない部分や難しい部分をVBAでおぎなう、という感じで取り組まれるのが一番じゃないかなって思ってます。ただこの辺の線引きは、個人差が出るところだと思います。クエリ使わず、全部こうやってコード書いてテーブル作ってデータ抽出している、なんて人もいるみたいですしね。
VBAを使うのか、他のオブジェクトの能力で合理的に進めるのか・・・この辺の判断は、処理を作ってる皆さんご自身が判断することです。
少しずつ慣れていって、この辺の判断をつける力を身につけていってくださいね。
![]() |
![]() |
![]() |