<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ||
MS-Access2000超入門部屋--フォームで選んだレコードだけ印刷する仕組み | ||
1 > 2 > 3 |
「指定したレコードだけ印刷したい」「指定したレコードだけ宛名ラベルに打ち出したい」って仕組み、作ってみましょうか。
一見どうやればいいのか迷いそうですけれど、決まったやり方はないので、要は「考えよう」ってことです。
今までいろいろ見てきた方法を駆使して、仕組みを作ってみましょう。
他のページの解説とダブっちゃう部分もありますが、おさらいも兼ねて見ていってください。
簡単に言ってしまえば、
基のテーブルに「Yes/No」の判断ができるフィールドを作って、
そのフィールドを基に絞り込むクエリを作って、
そのクエリを、レポートのレコードソースにすればよいわけです。
「あ、なんだ、そういうことか」と思った方は、早速挑戦してみてください。工夫次第ですから概要がつかめれば作りこんでいくことができるでしょう。
「さっぱりわからない」という方は、簡単な仕組みをひとつ、いっしょに作ってみましょう。
ほんとに簡単な仕組みの作り方をお話します。
皆さんの理想には程遠いかもしれませんが、とにかく基本的なところを掴んでしまってください。
ではまいりましょう。
以下のようなテーブルがあります。あるんです。
なんでもよいので、適当なやつを用意してください。わたしは、テーブル名を[テーブル]にしました。
名簿とか顧客データベースとかだと、住所とか電話番号とかいろんなフィールドがもっとたくさんあると思うんですが、今日は練習ですし、シンプルなテーブル使って試してみるのが一番わかりやすいと思います。
いちおうわたしはこのテーブルを使ってお話していきますので、お手持ちのテーブルと比較しながら読んでいってくださいね。
よかったら同じような感じのテーブル作って、何件かデータ入力して試してみてください。
で、このテーブルを基にして名簿の印刷をしたりラベルの印刷をしたりするんですけど、たまに、「トミー・ショウさんとニール・ショーンさんだけ印刷したい」という場合、どうすればいいでしょう。と、いうのが、これからのテーマです。
このテーブルの中には、この二人だけを抽出するような値は・・・見当たりませんね・・・。
まあ、二人だけなら、名前で絞り込む方法もあるでしょうが・・・10人も20人も指定したい場合とか、どうすればいいんでしょうね。気軽に「この人とこの人とこの人」と指定してぱぱーっと印刷したい場合とか、どういう仕組みを作るのが一番よいでしょう。
では、やってみましょう。
このテーブルに、YesNo型のフィールドをひとつ作り足します。
こういう仕組み、手っ取り早く作るならYesNo型が便利ですよ。
フィールド名はなんでもいいんで、わかりやすいものをつけてください。
で、テーブルを保存して、このテーブルを基にした表形式のフォームを作りましょう。デザインはお任せします。
わたしはオートフォーム機能を使って、こんな感じのフォームにしました。フォーム名は[フォーム]です。
テキストボックスの大きさなどは調節してくださいね。
多分、YesNo型のフィールドは、チェックボックスと呼ばれる種類のコントロールになってると思います。
え?コントロールって何か、って?いまごろそんなこと思っちゃいけませんよ。
テキストボックスとかチェックボックスとかラベルとかコマンドボタンとか・・・フォームやレポート上に配置する「もの」のことをこう呼ぶんです。八百屋に並んでるものを「野菜」って呼ぶのとおんなじようなもんかもしれないですね。
で、ためしに・・・3つほどチェックボックスをクリックしてみて↓・・・。
このフォームはこのまま出しっぱなしの状態で、そっとそっと[テーブル]を開いてみましょう。
あ、あれ?・・・テーブルにはふたつしかチェックがついてない・・・。
他のページでもこれと同じようなことお話してますので、もうこういうことは100も承知、という方、いらっしゃると思いますが、一応おさらいです。
Accessは、レコード単位で物事を考えます。他のリレーショナル・データベースも同じだと思いますけどね。
データを入力したり更新したりする場合、内容が反映されるのは「他のレコード(次のレコードとか)に移動したとき」とか「そのフォームやテーブルなどを閉じるとき」など、いわゆる「レコードの保存」が行われたら、正式にテーブルの中のデータとして認められるのです。つまり・・・「レコードセレクタ」にエンピツマークが出ているレコードはまだだ、ってことなんです。
表計算ソフトに慣れてる方は、こういうのがよくわからない・・・とおっしゃるんですが、表計算ソフトは「ファイル単位」で保存されていきますからね。あれはデータベースじゃありませんから・・・。こういうところで比較してしまわないで、データベースの「レコード単位でデータは保存されていく」という様子を、しっかり掴んでしまってくださいね。
理屈はいろいろついてまわりますが、とにかくこういうもんだということを知っておかないと、「どうも1件だけいつも件数が合わないなぁ」とかいうことになっちゃいますよね。
んでは、[フォーム]も[テーブル]も閉じてください。
で、改めて[テーブル]を開くと・・・・。
3つしるしがついてると思います。
こういうものなんですよ。
確認いただけたら、[テーブル]を閉じましょう。
次に、「[テーブル]のチェックマークがついているレコードだけ抽出する」クエリを作ります。
これは簡単ですよね。
なんか適当な名前をつけて保存してください。
わたしは[クエリ]にしました。え?やる気あんのかって?あ、ありますよ。ありますあります。
左上のツールボタンでデータシートビューに切り替えて見てみると・・・。
チェックボックスがYES状態になっているレコードだけ抽出されますよね。
確認できたら、このクエリはいったん閉じましょう。
で、このクエリを基にして、レポートを作ります。
宛名ラベルなどをすでに作ってる方は、そのレポートの「レコードソース」欄をこのクエリに変更すればオッケーのはず。
フィールド名などを無理やり変更していなければ、うまいこと変わってくれるはずです。
わたしはとりあえずこんな感じのレポートを作ってみました。名前は[レポート]です。
あ、所持金の合計を出そうかなと思ってSum関数使ってみたんですが、Sum関数って、ページフッターとかページヘッダーでは動かないですからね。
これは何度かお話しているかもしれませんね。
プリントアウトすると。。。こうなっちゃいます↓
レポートは、詳細セクションを、レコードソースにしているクエリやテーブルの中のレコードの数だけ繰り返して印刷されます。つまり、全部出してみないと「何件あって、所持金の合計がいくつか」を計算させることはできないのです。だから、「ページフッター」の欄にSum関数とかCount関数とか置いても、「ページフッター」を印刷しようとしているときはまだ所持金の合計がわからないのですね。
ページフッターを使いたい、っていう方もいらっしゃるんですけど・・・ちょっと作りこまなくちゃならないので、今回はレポートフッターを使いました。
どうしてもページフッターを、という方は、後で「VBAの小屋」を覗いてみてください。