<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



さて、サブフォーム部分を「データシート」形式にして、シンプルになったのはいいんですが・・・。
フォームフッター部分が表示されないんで(データシートだから・・・)、「売上金額の合計を表示させたい」って思っても、サブフォーム内にはそういう欄を設けることができなさそうです。

ちょっとヘルプを見てみましょう。参考になることが載ってるかもしれない。。。

「サブフォーム」っていう単語で探してみると、なんかいろいろ細かい操作が載ってました。
いろいろ読んでみると・・・どうやら、「フォームフッター部分は、表示はされないけれど存在はしているようです。そこで、とりあえず仮に、サブフォーム内のフォームフッター部分で合計金額を計算させるテキストボックスを設けておいて、そのテキストボックスの内容を、メインのフォームの方で参照するやり方が載ってました。
これやってみようと思います。


デザインビューにひっくり返してみると、確かに、サブフォーム部分にフォームフッターを表示させることができますよね。
じゃあ、ここに適当な大きさのテキストボックスを作っておいてください。
で、Sum関数を使って合計出してみましょう。おさらいですよ。

んでもって、メインフォームの方にも、同じように非連結のテキストボックスをひとつ、設けておいてください。最終的にこっちに、合計金額が出るようにしてみようと思います。

で、ヘルプ、もう少し細かく追ってみると・・・。

サブフォーム内のテキストボックスなどを参照するときの書き方が載ってます。
←ここのページ、けっこう重要ですんで、サブフォームをよく作る方はチェックしておいてください。

サブフォーム名.Form!サブフォーム内のテキストボックス名

っていう書き方になります。正確には、「サブフォーム名」じゃなくて、「メインフォーム内でのサブフォームのある位置の名前」なんですけど、フォームウィザードで作った場合なんかはこの辺あんまり気にする必要ないかもしれません。
とりあえず、サブフォームに関するいろいろな情報、ヘルプの中に詳しく載ってますので、確認しておいてくださいね。

(注:サブフォームの扱い方って、Accessのバージョンによって微妙に異なります。特に上のような感じで、サブフォーム内のコントロールを参照する書き方など、ほんのちょっとずつですけど考え方が異なってたりしますので、必ず、ヘルプを細かく読んでみてください。ヘルプは結構読みにくいですけど、大切なことたくさん書いてありますから・・・)

いわゆる「サブフォーム名」に当たるのは・・・。
左の図を見てみてください。図の状態で選択されているのは「メインフォーム内の、サブフォームコントロール」というやつです。まあ、サブフォームそのものなんですけどね。
わたしのは、名前が「照会サブフォーム」ってなってました。
みなさんのはどうなってますか???

んでもって、サブフォーム内のテキストボックス(Sum関数使って合計出したあのテキストボックス)は、「テキスト8」って名前でした。
みなさんのはなんて名前になってるかな。。。多分、「テキストxx」って感じだと思います。あわせて確認してくださいね。

んでもって、メインフォームの方に作った火連結のテキストボックスに、ヘルプに載ってた情報をもとにこんな式を書きました。

=[照会サブフォーム].Form![テキスト8]

みなさんの場合は、テキストボックスの名前とか違うと思いますんで、必ず確認してくださいね。上の式丸写しするとかはなしですよ。せっかくだから・・・構造とか仕組みとか押さえちゃってくださいね。きっとあとあと役に立ちますから!


じゃ、上書き保存してからフォームビューに切り替えてみて・・・。

あ、ついでに、列幅とか調節しておきますかね。
データシートなんで、左の図で行くとこの赤い○印のとこをドラッグすれば、列幅は簡単に変わります。
こういう手軽さがけっこういけてますよね。表形式のフォームにはない手軽さです。

で、改めて、「合計」を計算させたテキストボックス、確認してみてください。
ちゃんとサブフォーム内の「金額」の合計を出してくれてます?
エラーになってる場合は、サブフォーム名などを正しく参照しているか、もう一度確認してくださいね。

レコード移動ボタンを使って、別の伝票を表示させながら、合計欄の確認をしておきましょう。



さて、ココまでいかがでしょう?
サブフォームっていっても、いちおう、基本的な構造や使い方、押さえておく必要ありますよね。
その上で、うまいこと活用していってくださいね。ここまでいろいろやってみると、「じゃ、こういうフォームを作るためにはどういうテーブルを設計したら・・・」とか、その辺少しずつ見えてくると思うんです。Accessも含めて、データベース扱っていく上で、すごく大切なことなんですよ。

Accessの基本的なしくみを理解せずに適当に作ったテーブルだと、サブフォームとか作るのすっごく大変だったりします。
とにかく、何度かサブフォームを含むデータベースを作ってみて、テーブルの設計と実際のフォームのデザインや使い勝手の部分を見比べていくのが一番かなって思います。こういうのを「リレーションシップ」っていうんですね。
ただ単にテーブルを小分けすることをリレーションシップというのではないので、なかなか教則本とか入門書だけで覚えるの、難しいです。
やっぱなんか作ってみないと、ピンとこないですよね。


んでは少し毛色の違ったお話を・・・。

社員番号だけじゃなくて、社員名も出したい・・・

って場合はどうしましょうか。
メインのフォームが基にしているレコードソースで工夫するのがふつうなんでしょうけど、なんかめんどっちいし・・・。
えっ?や、やる気はありますよ!なに言ってんですか。ファイトファイト!

ただ「このフォーム上に表示されてる社員番号と同じ社員番号を持つ社員の名前をぽこっと出せればそれでいい、っていうだけなら、うまい方法がありますよ。
Dlookup関数ってやつです。

やってみましょう。

まず、適当にひとつテキストボックス作ってください。
配置とか大きさはお任せします。
あ、ラベルはいらないかな・・・ラベルだけ、削除しちゃって下さって結構です。っていうか、削除しちゃってください。

んでもって、テキストボックスの「コントロールソース」欄に、関数を書きます。ちょーっと長いんですけど、DLookup関数で・・・。

=Dlookup("テーブル内のフィールド名","テーブル名","条件式(あれば)")

と入力します。条件式、ってとこが、すっごくめんどくさいんですけどね。
「社員番号がこのフォームの社員番号というとこの値と同じレコードを探せ」っていう意味の式を入力します。
いちおう、社員番号フィールドのデータ型が「数値」か「テキスト」かによって、書き方が若干異なるんで、そのテンだけ注意してください。
わたしは「テキスト型」にしてます。

=Dlookup("名前","社員テーブルだわん","社員番号='"&[forms]![照会]![社員番号]&"'")

と、こんな感じですね。ややっこしいですけど、こういう条件式の書き方わかっとくと、すっごく楽ですんで、少しずつ慣れていってくださいね。
色をちょっと変えているところは、半角のシングルコーテーションです。「社員番号」がテキスト型の場合は、これがミソになります。

できれば・・・丸々コピーペーストをならさないで、ひとつひとつ入力してみてくださいね。練習練習♪


参考までに・・・もし、「社員番号」が数値型だったら・・・。下のように書きます。

=Dlookup("名前","社員テーブルだわん","社員番号="&[forms]![照会]![社員番号])

どのヘンに違いがあるのか・・・その辺じっくり見ておいていただければ、きっとあとあとお役に立つと思います。

長くなりますよね・・・プロパティシートはドラッグすれば幅を変えることはできますけど・・・ちょっと書きにくいなーと思われたら・・・。
Shiftキーを押しながらF2キー、押してみてください。

ズームという機能です。といっても拡大されるわけじゃないですけど。

でも、あ???なんか???文字化け???化けてる方、いらっしゃいます???

英語のフォントになっちゃってるんですね。右下のフォントボタンをクリックして、MSPゴシックでも選んでおいてください。

こういうのは、日本人の宿命ですねぇ。
いやはや、ほんとに、コンピュータというのは英語圏の方が簡単だし有利です。

あ、フォントサイズ大きくすれば、もうちょっとみやすくなるかもしれませんね。
いろいろ工夫してみてください。

と、ちゃんと表示されます???