SSブログ

フォーム コンボボックスで選択された内容でサブフォームの内容を絞り込む [フォーム]

 分類をフォーム(サブフォーム関連なので)にするか、コンボボックスにするか迷いましたが、先に書いたサブフォームの記事の関連になるので、同じ分類のフォームにしました。
フォーム 基本的なサブフォームの例(連結フォーム)
 今回は親フォームが連結フォームではなく、サブフォームのリンク設定を使わない、サブフォームの使用例を取り上げます。

 画面はこんな感じ。

 地方CDコンボボックスを変更すると、サブフォームの都道府県一覧が絞り込まれます。
 画面は似ていますが、前回とは以下の点が異なります。

・前回は親フォーム・サブフォームともに連結フォームでしたが、今回親フォームは非連結フォームです。

・前回は親フォームのレコード移動にあわせて、サブフォームの内容が自動で絞り込まれましたが、今回はコンボボックスのイベントに処理を作成します。

・前回はサブフォームのリンク設定を使用しましたが、今回はこの機能を使用しません。

 以下手順です。前回と重複する部分がかなりありますが、手順通り載せます。

 使用するデータは以下の通り。

 TMCHIHO(地方)テーブルが親フォームの表示内容です。   
 TMTDFK(都道府県)テーブルがサブフォームの表示内容です。
 (都道府県テーブルには他にも項目がありますが、今回の例では使用しません。)

 まず最初に、都道府県一覧のサブフォームの方から作成します。
 「作成」タブから「フォームデザイン」をクリックし、新しいフォームを表示させます。

 フォームヘッダーを使用するので、表示させておきます。
 適当な場所で右クリックし、出てきたメニューから、「フォームヘッダー/フッター」をクリックします。
 フォームヘッダーとフッターが表示されます。

 今回フォームフッターは使わないので、縮めています。

 サブフォームは帳票フォームにします。

 左上の四角い所を一度クリックすると、黒いポチが現れます。
 その状態で「デザイン」タブの「プロパティシート」をクリックすると、プロパティシートが表示されます。
 プロパティシートの「書式」タブにある「規定のビュー」項目を、「帳票フォーム」に設定します。

 次に、フォームに表示させるデータを設定します。

 フォームのプロパティ(フォームの右上に黒いポチが表示されている状態でプロパティシートを表示させる)で、「データ」タブにある「レコードソース」項目を選択し、右側に表示される「…」をクリックします。

 クエリビルダーが表示されます。
 「テーブルの表示」ウィンドウでTMTDFK(都道府県テーブル)をクリックし、「追加」ボタンをクリックします。
 下に表示されているクエリビルダーに、TMTDFKテーブルの内容が表示されます。
 「閉じる」ボタンをクリックして、「テーブルの表示」を閉じます。

 クエリビルダーで表示項目を設定します。
 画面上半分のテーブル項目から「CHIHOCD(地方コード)」「TDFKCD(都道府県コード)」「TDFKMEI(都道府県名)」を、画面下半分にドラッグ&ドロップします。
 TDFKCDの列の「並べ替え」に「昇順」を設定します。
 設定が終わったら、右上のばつボタンをクリックして、クエリビルダーを終了します。
 このクエリの内容は、親フォームを作るときに、修正をして最終形にします。

 フォームデザインの画面に戻ります。
 画面にデータ表示用のコントロールを配置します。

 「デザイン」タブにある「既存のフィールドの追加」アイコンをクリックします。
 「フィールドリスト」ウィンドウが表示されます。
 表示された項目一覧から、「TDFKCD」項目をクリックし、「詳細」の場所へドラッグ&ドロップします。「TDKMEI」も同様に行います。

 もし、ドラッグ&ドロップしたときに、テキストボックスに「SELECT…」という内容が表示されていたら、これはACCESSのバグなので、一度コントロールを削除して、再度ドラッグ&ドロップして下さい。

 これが正しい状態です。
 ラベルの名称を変更しておきます。
・TDFKCD->CD
・TDFKMEI->名称
 そして、ラベルをヘッダーに移動します。ドラッグでは「詳細」から別の場所に移動できないので、カット&ペーストします。
 コントロールの配置を調整し、体裁を整えます。

 だいたいこんな感じで。

 フォームビューで見ると、こんなふうになります。

 その他のフォームの設定をしておきます。

 フォームのプロパティで、「データ」タブにある「追加の許可」「削除の許可」「更新の許可」項目を、すべて「いいえ」に設定します。
 このフォームではデータの操作ができないようにします。

 続いて、フォームのプロパティで、「書式」タブにある「移動ボタン」項目を、「いいえ」に設定します。
 フォームビューで画面最下部に表示されるレコード件数や、移動ボタンが表示されなくなります。

 以上でサブフォームはできあがりです。

 「F都道府県コンボサブ」という名前を付けて保存し、閉じます。
 この辺までは前回と同じです。

 次は親フォームを作ります。
 先程と同様に、「作成」タブから「フォームデザイン」をクリックし、新しいフォームを表示させます。

 親フォームは「単票フォーム」で作成します。
 デフォルトで単票フォームになっていると思いますが、いちおう確認します。
 フォームのプロパティで、「書式」タブにある「規定のビュー」項目が、「単票フォーム」になっていればOKです。

 今回親フォームは非連結フォームで作成します。

 フォームのプロパティで、「データ」タブにある「レコードソース」項目が、空欄になっていることを確認してください。

 画面にコンボボックスを配置します。

 「デザイン」タブにあるコントロールのアイコンから、コンボボックスをクリックします。
 詳細の適当な場所をドラッグして、コンボボックスを作成します。
 このとき、ウィザードが表示された場合は、キャンセルをクリックしてウィザードを閉じてください。

 コンボボックスの設定を行っていきます。
 コンボボックスをクリックして選択し、プロパティの「データ」タブにある「値集合ソース」を選択し、右側に表示される「…」をクリックします。

 クエリビルダーが表示されます。
 「テーブルの表示」ウィンドウでTMCHIHO(地方テーブル)をクリックし、「追加」ボタンをクリックします。
 下に表示されているクエリビルダーに、TMCHIHOテーブルの内容が表示されます。
 「閉じる」ボタンをクリックして、「テーブルの表示」を閉じます。

 クエリビルダーで表示項目を設定します。
 画面上半分のテーブル項目から「CHIHOCD(地方コード)」「CHIHOMEI(地方名)」を、画面下半分にドラッグ&ドロップします。
 CHIHOCDの列の「並べ替え」に「昇順」を設定します。
 設定が終わったら、右上のばつボタンをクリックして、クエリビルダーを終了します。

 続いてコンボボックスのプロパティを設定します。

 「書式」タブの、「列数」を「2」に、「列幅」を「1cm;2cm」に設定します。
 また、ラベルの表示を「地方CD」に書き換えます。

 「その他」タブの、「名前」を「CHIHOCD」に設定します。

 次に、コンボボックスで選択された地方CDの名称を、表示させるテキストボックスを作成します。

 「デザイン」タブにあるコントロールのアイコンから、テキストボックスをクリックします。
 詳細の適当な場所をドラッグして、テキストボックスを作成します。
 このとき、ウィザードが表示された場合は、キャンセルをクリックしてウィザードを閉じてください。

 テキストボックスのプロパティの「データ」タブにある、「コントロールソース」項目に、
=[CHIHOCD].[Column](1)
 を、設定します。
 また、ラベルの表示を「地方名称」に書き換えます。
 あと、配置を調整して、体裁を整えます。

 サブフォームコントロールをフォームに配置します。

 「デザイン」タブの「コントロール」から、サブフォームのアイコンをクリックします。
 その後、「詳細」の領域の適当な場所で、クリック&ドラッグして四角を描きます。
 「サブフォーム ウィザード」が表示される場合がありますが、「キャンセル」ボタンをクリックして閉じてください。

 フォームにサブフォームが配置されました。

 サブフォームの設定を行います。

 サブフォームが選択された状態で、「デザイン」タブの「プロパティシート」アイコンをクリックして、プロパティを表示させます。
 プロパティシートの「データ」タブにある、「ソースオブジェクト」項目の「▼」をクリックして「F都道府県コンボサブ」を選択します。
 サブフォームの枠の中に、先程作成した「F都道府県コンボサブ」の内容が表示されます。

 サブフォームの名前を変更します。
 プロパティシートの「その他」タブにある、「名前」の内容を、「subTDFK」に変更します。

 サブフォームの位置の調整をし、サブフォームのラベルは要らないので削除します。

 また、親フォームのレコードセレクタは表示させたくないので、フォームのプロパティで、「書式」タブにある「レコードセレクタ」項目を「いいえ」に設定します。
 ここで親フォームはいったん閉じます。

 「F都道府県コンボ」という名前を付けて保存します。

 再度、「F都道府県コンボサブ」フォームをデザインビューで開きます。

 フォームのプロパティで、「データ」タブにある、「レコードソース」項目を選択し、右側に表示される「…」をクリックします。

 クエリビルダーが表示されます。
 CHIHOCD列の「抽出条件」を選択し、右クリックで表示されるメニューから「ビルド」をクリックします。

 式ビルダーが表示されます。
 「式の要素」から、「forms」を展開し、表示された「すべてのフォーム」を展開します。
 さらに表示された「F都道府県コンボ」をクリックします。
 「式のカテゴリ」に表示された項目から、「CHIHOCD」をダブルクリックします。
 上の領域に
Forms![F都道府県コンボ]![CHIHOCD]
 が表示されます。
 「OK」をクリックして、式ビルダーを閉じます。

 式ビルダーで設定した内容が、抽出条件に設定されます。
 (式ビルダーを使用せず、直接入力しても、もちろんOKです)
 右上のばつボタンをクリックして、クエリビルダーを終了します。
 F都道府県コンボサブを保存して閉じます。

 再び「F都道府県コンボ」フォームをデザインビューで開きます。

 コンボボックスのプロパティで、「イベント」タブにある、「更新後処理」項目を選択し、右側に表示される「…」をクリックします。

 「ビルダーの選択」が表示されるので、「コードビルダー」を選択して、「OK」をクリックします。

 VBA画面が表示されます。

Private Sub CHIHOCD_AfterUpdate()
 と、
End Sub
 の間に、
Me.subTDFK.Requery
 を、記述します。

 コードを記述したら、右上のばつボタンでVBA画面を閉じて、ACCESSに戻ります。

 以上でできあがり。「F都道府県コンボ」をフォームビューで表示させます。

 最初はこんな風に表示されます。
 コンボボックスで地方を選択すると、

 サブフォームの内容が選択した内容で絞り込まれます。

 ユーザーが画面を操作して、表示されるデータを絞り込むフォームを作る場合は、このような形がベースになるんじゃないかと思います。
 前回のサブフォームのリンク設定を使った作り方では、サブフォームの表示内容は親フォームのレコードに連動する形になるので、ユーザーが操作して絞り込みを行う画面には向いていないと思います。
 私の場合、フォームでは今回のようなサブフォームの使い方が多く、前回のリンク設定を使うやり方は、レポートでよく使います。

 以上でお終いです。

 さて、蛇足。
 今回作成した画面、地方CDが選択されていないと、サブフォームには何も表示されません。
 できれば地方CDが選択されていないときは、絞り込みなしで全件表示させたいな、と言う場合もあると思います。
 それはまた今度。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。