フォーム コンボボックスで選択された内容でサブフォームの内容を絞り込む [フォーム]
分類をフォーム(サブフォーム関連なので)にするか、コンボボックスにするか迷いましたが、先に書いたサブフォームの記事の関連になるので、同じ分類のフォームにしました。
(フォーム 基本的なサブフォームの例(連結フォーム))
今回は親フォームが連結フォームではなく、サブフォームのリンク設定を使わない、サブフォームの使用例を取り上げます。
画面はこんな感じ。
地方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が選択されていないときは、絞り込みなしで全件表示させたいな、と言う場合もあると思います。
それはまた今度。
コメント 0