<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--フォームで選んだレコードだけ印刷する仕組み
  1 > 2 > 3



ではレポートは閉じて、フォームのどこかにコマンドボタンを作りましょう。

フォームのフッター部分にでも作りましょうか。

で、このボタンのクリック時のイベントを作ります。

コードならこんな感じで↑

マクロでも同じことです。「レポートを開く」というアクションを選んで、レポート名と、必要に応じてビューの指定をします。
いきなり印刷装置からがーっと印刷された方がよいのなら「印刷」、いったん画面で確認したい場合は「印刷プレビュー」にするとよいでしょう。



じゃあ、フォームを保存し、フォームビューに切り替えて・・・。今作ったコマンドボタンクリックすると、レポートが出てきますか?

じゃあ、あとひとつどれか追加でチェックをして、コマンドボタンをクリックして・・・

・・・あ、やっぱり・・・最後にクリックしたレコードって、反映されないですよね。

フォームでよく見ると、チェックボックスの様子が↑微妙に他のレコードと違うと思いません?
なんか、点線で囲まれてるみたいな・・・。この状態だと、反映されてないってことになりますね。未遂です。

これは、他のレコードクリックしたり、フォームをいったん閉じて開いたりすればふつうになります。
あと、このフォームを「再クエリ」をしても反映されますね。
わたしはよく、OpenReportする直前にRequeryする方法を使うんですけど・・・。

これでもオッケーだと思いますよ。

でも今回は他の方法やってみましょうか。

入力中、更新中のレコードの内容を反映させるということは、要するに「レコードの保存」という操作をやる必要があるのです。
これは、今までお話してきたようにフォームを閉じたりレコードの移動をしたり再クエリしたりすることによって行われますが、「レコードの保存」という操作自体は、メニューバーの中にあります。↓

フォームビューの状態にしていれば見つかると思いますが、メニューバー[レコード]→[レコードの保存]です。Shiftキーを押しながらEnterキーを押してもいいみたいですね。このメニューを選べば、入力中、更新中のレコードをちゃんと保存して、テーブルの中の1メンバーとして反映させることができるのです。

でもーこんなのわざわざ選ぶくらいなら、再クエリとかやった方がいいですよねえ。
それか、このフォームは閉じて、「印刷スル」のボタンはメニューフォームとか作っといてそっちに置くとか。

この「レコードの保存」って、マクロとかではどうやって作ればいいんでしょうね。それがわかれば、コマンドボタンをクリックしたときに反映させることができそうですよね。




Accessに用意されている各種「ウィザード」は、とても便利ですが、ウィザードだけ使ってると基本的な構造が見えなくなってしまうので、わたしは普段はお奨めしてません。ウィザードを使わないでひととおりの操作を理解して、作業時間の短縮などのねらいでケースバイケースで使い分けをしていかれるようお奨めしてます。それに、ウィザードはとってもパワーのいる仕事なので、PCによっては起動しなかったりしますね・・・。まあ、最近のPCはパワーがありますからそんなことはないと思いますけども・・・とにかく、いつもこの「コントロールウィザード」ボタンをオフにした状態で使っているんですが、今日はこれをオンにしてみましょう。

(ボタン作り終わったらオフにしておいてくださいね)

で、この状態で、コマンドボタンを作ります。

そうすると、コマンドボタンを作るためのお手伝いウィザードが起動してきます。
「レコードの操作」という中に、↑「レコードの保存」ありますね。

後は適当でよいので、適当なボタンを作ってください。

ボタンの絵とかいろいろありますから、お好きなの選んでもいいかもしれないですね。

なんかボタンができました?

んじゃ、試してみましょうか。



フォームを開いて、どれかひとつチェックをつけると・・・そのときはなんか↓点線で囲まれたような状態になってますよね。

では、さっき作った「レコードの保存」のボタンをクリックすると・・・

どうでしょう。チェックボックスの様子が、わずかですけど変わったと思いません?まあもちろん、このフォーム内の「他の場所」をクリックしたんですから、あたりまえといえばあたりまえなんですが・・・・でも、この操作の後、レポートの印刷をすれば、最後にチェックしたレコードもちゃんと反映されて出てくるはずです。

え?コマンドボタン2種類クリックするの面倒?
うーん、そりゃそうですね・・・レコードの保存ボタンクリックし忘れちゃったら、結局同じことですもんね。




ウィザードで作らせたこのボタン、実際にはどんなことやってるんでしょう。
クリック時のイベントを見てみましょう。

・・・なんか妙に難しそうな・・・。

何行か書いてありますが、エラーが起こったときどうするか、とかいう感じの記述がほとんどなので、一番長い行だけ見てください。
DoCmdってやつですね。その次にDoMenuItemっていうのがありますけど、よく見るとどうやら「メニューバーの中にあるメニューを実行する」ためのコマンドみたいですね。メニューバーの中のメニューにもそれぞれ、VBAで操作する場合に使う「名前」がついてるみたいです。

まあ難しいことを考え始めたらきりがないですね。ええと、レコードの保存メニューをやったあと、印刷するように書き加えてみてはどうでしょう。

フォームを保存し、フォームビューで開いて試してみましょう。

新しくひとつどれかチェックをつけて(チェックをはずしてもいいですね)、レコードの保存ボタンをクリックしてみましょう。
どうでしょう。今度は、最後にチェックしたレコードも、レポートの方に反映されてきますか?



一度チェックをつけたものは、次にチェックをはずすまでずっとついたままです。
テーブルの中のフィールドですからね。
全部クリアしたいときは、どうすればいいんでしょう。いちいち全レコード見て一個ずつチェックはずすのめんどくさいですよね。

フォーム上で「これとこれとこれ」って指定したいだけなんだけどなぁ・・・と思って、ただ単にフォーム上にチェックボックスを作っただけだと、
(つまり、そのチェックボックスのコントロールソースが空っぽの、非連結のチェックボックスの場合)

フォームを見ると一見、全レコードの右側にひとつずつチェックボックスが存在している↓みたいに見えますけど、

ぎゃはは。どれか一個チェックボックスをクリックすると、全部にチェックがつきます。

運命共同体です。

非連結っていうのはこういうことなんですよ。
単票形式の場合だと、1レコード分しかフォームに出てこないから非連結でも「必要なレコードにチェックをつけてる」みたいな役割を果たしますが、表形式の場合はそうはいかないですよね。フォームもレポートと同じで、デザイン的には1レコード分のデザインがあって、それをレコードの数だけ繰り返しているだけなのです。
だからね・・・基にしているテーブルに、フォーム内の各コントロールに対応するフィールドが必要なんです。
ちょっとすると「使いにくい」って思われがちですが、フォームやレポートとテーブルやクエリがそれぞれこういう関係を持っているからこそ、簡単に開発できる一面もあるんですよ。あまり悪く考えず、仕組みを掴んでいってください。

んでは、いったん選択したチェックボックスを全部オフにする仕組みを作りましょうかね。
フォームはいったん閉じましょうか。