
サブフォームって?
サブフォームとはフォームの中にあるフォームっていう事です。
こんなイメージです
失礼しました
こういうやつです
これは私が過去に作成した、超過勤務システムの時間外入力画面です
日付を合わせると、その日付の超勤情報が抽出されるという仕組みです
2つテーブルにあるフィールド同士を紐づけて1対多の関係でリレーションを築きフォーム上にデータを表示させることができます。
(今回は親フォームにレコードソース設定がないので、テキストボックスで子フォームをフィルタかける形です)
なんだかよくわからない説明ですよね
第9回で作成した続きで説明をしていきます
今回、何を作るかというと、「DQのアイテムデータベースをAccessで作る07」で作った、ボタンで動く日付テキストボックスに表示されている日付の伝票を抽出して表示するサブフォームを作ります

まず「Q-伝票」をコピーして貼り付けます


名前を「Q-伝票サブ」にします

「Q-伝票サブ」レコードソースとした、帳票フォームを作ります
フォームデザインで新規フォームを作り、レコードソースを「Q-伝票サブ」にします


プロパティシートの「書式」タブを次のように設定します
- 既定のビュー:帳票フォーム
- 自動中央寄せ:はい
- レコードセレクタ:いいえ
- 移動ボタン:いいえ
- スクロールバー:垂直
- コントロールボックス:いいえ
「日付伝票サブ」と名前を付けて保存します

日付伝票サブ上で右クリックし、「フォームヘッダー/フッター」を選択します

フォームにヘッダーとフッターが表示されます
フィールドリストを表示して、「日にち」「アイテム」「値段」をフォーム上に配置します

「アイテム」フィールドがどうもリストボックスになっているのでテキストボックスに変更して、
いい感じに並べ替えを行います

いい感じに並べました

上書き保存して、「日付伝票サブ」フォームを閉じます
続いて「伝票日付」フォームに「日付伝票サブ」を埋め込んでいきます
「伝票日付」フォームをデザインビューで開きます
「伝票日付」フォーム上に「日付伝票サブ」をナビゲーションウインドウからドラッグ&ドロップします

フォームの中にフォームが表示されます
日付伝票サブのレコードソースである「Q-伝票サブ」を開いて、伝票日付フォームで日付でレコード抽出をするようにします

日にちを追加して、抽出条件上で右クリック→式ビルダーを開き
「伝票日付」→「日付」を選択します
抽出条件には「[Forms]![伝票日付]![日付]」と表示されます
伝票日付をフォームビューで表示すると

フォームの中にフォームがあります
実は今の状態では日付設定をしても、サブフォームに該当するレコードを表示してくれません
フォームを再表示するVBAを記述する
日付伝票フォームをデザインビューで開き、「コードの表示」をクリックします


コードが表示されます
各ボタンのプロシージャ内に
Forms!伝票日付!日付伝票サブ!.Requery
の1行を追加します
この1文は「伝票日付」フォームの中のサブフォーム「日付伝票サブ」を再表示するという命令文です

テキストボックスの日付を売り上げがあった日に調整すると、サブフォーム内に、伝票が表示されます

今回はここまでにします
ちょっとずつシステムっぽくなってきました!

コメント