- ベストアンサー
フォーム内で選択した情報のみ表示する方法
- フォーム内で選択した情報のみを表示する方法について教えてください。
- メインフォームで選択した情報をサブフォームに表示する方法について教えてください。
- 複数の人を選択した場合に、必要な情報のみを表示する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>サブフォームをクロス集計に指定すると、「パススルー クエリまたは日固定列のクロス集計クエリを、サブフォームまたは、サブレポートのレコードソースとして使うことはできません サブフォームのレコードソースはクロス集計クエリなのでしょうか?クロス集計クエリを元に作ったフォームですか? サブフォームとクロス集計クエリの結合が合っていないと思います。確認してみてください。 サブフォームのプロパティのレコードソースの右ボタンでソースとして指定したクエリを表示できますのでColumnheadingsプロパティだとグループ化されているフィールドで列見出しに設定されているフィールドがあります。そのフィールドとフォームが適合しない状態と思うのですが情報が少ないためそのくらいしか回答できません。 メインホームのリストを選択してクエリ自体がちゃんと抽出できるか確認しそのクエリを元にフォームをつくりサブフォームに配置しなおしてみてはどうですか。
その他の回答 (2)
- O_cyan
- ベストアンサー率59% (745/1260)
>「”forms![メインフォーム名]![リストBOX名]”を有効なフィールド名、または式として認識できません」というエラー これはフォーム名やリストボックス名が合っていない場合などに出ますが・・。 メインフォーム名やリストBOX名名は合っていますでしょうか? 例えばAフォームにあるリスト1というリストボックスの値をクエリの抽出条件にしたい場合は =Forms![Aフォーム]![リスト1] となります。 フォーム名やリストボックス名は作ってある名前と合っていますでしょうか。 またはクエリの名前のフィールドの抽出条件の欄でビルドを使いフォームの中のメインフォームを選択しリストボックスを指定してください。 クエリのみの状態で抽出条件を上記のように設定しメインフォームを開きリストボックスを選択しクエリで抽出できるか確認してください。 リストボックスで複数選択しないのならこれで出来ます。 >テキストBOXの更新後処理のイベントなどで >Forms![メインフォーム名]![サブフォーム名].Requery と#1で書きましたがリストボックスの更新後処理でも良いです。テキストボックスの更新後処理だとリストで選択したらテキストボックスをアクティブにしてフォーカスを移動させないとイベントが発生しないのでリストボックスの更新後処理に記述すればリストを選択すれば更新後処理イベントがすぐ発生しますので。
補足
何度も回答いただいてありがとうございます。 やはり私の入力ミスでした。 しかし、今度はサブフォームをクロス集計に指定すると、「パススルー クエリまたは日固定列のクロス集計クエリを、サブフォームまたは、サブレポートのレコードソースとして使うことはできません サブフォームまたはサブレポートをクロス集計と連結する前にクエリの”Columnheadings/クエリ列見出し”プロパティを設定してください」というエラーがでます。 クエリ列見出しのプロパティの何を設定していいのか分かりません。何度も申し訳ないのですが教えてくださいおねがいします。
- O_cyan
- ベストアンサー率59% (745/1260)
サブフォームのソースになっているクエリにリストBOXで選択した名前で抽出をする条件を加えてRequeryすれば出来ます。 クエリの名前フィールドの抽出条件に =Forms![メインフォーム名]![リストBOX名] とすればリストBOXで選択された値(名前)で抽出します。 テキストBOXの更新後処理のイベントなどで Forms![メインフォーム名]![サブフォーム名].Requery などでサブフォームを再表示させれば出来ます。 >複数の人を選択したとき、必要な表だけ表示する方法 これはクエリに抽出条件をちょっと書き込むでは出来ないのでちょっと記述の作り込みが必要になります。 複数選択した場合はItemsSelectedなど使い Dim Var条件 As Variant Dim varItm As Variant strSQL = "Select * From テーブル名" For Each varItm In リストBOX名.ItemsSelected Var条件 = 'ここにリストボックスで複数選択された値を代入します。 Next DoCmd.RunSQL strSQL & " WHERE テーブル名.フィールド名 In ( " & Var条件 & " );" '作っておいたSQLに条件を追加して抽出する こんな感じでやらないと抽出できません。
補足
回答ありがとうございます。 教えていただいた通りにすると、「”forms![メインフォーム名]![リストBOX名]”を有効なフィールド名、または式として認識できません」というエラーが出るのです。 私の作り方が悪いとは思いますが、もし解決方法がありましたら宜しくお願いします
お礼
回答ありがとうございます。 やはりちゃんとクエリを作り直す必要があったみたいです。ありがとうございました