Accessのマクロを使用した子フォームのフィルター方法

このQ&Aのポイント
  • Accessのマクロを使用して子フォームのフィルターを設定する方法について教えてください。
  • 子フォームBの特定のIDを子フォームAの特定のIDをトリガーとしてフィルタリングしたい場合、フィルター名は設定せず、条件に「[フォーム名]![子フォームB名]![ID]=[フォーム名]![子フォームA名]![ID]」と設定します。
  • 現在、手元にAccessがないため、具体的な設定の例がなくて申し訳ありません。ただし、VBScriptで処理するよりもマクロで処理した方が速くなる場合があります。
回答を見る
  • ベストアンサー

accessのマクロで子フォームを使ったフィルターの方法を教えて頂きた

accessのマクロで子フォームを使ったフィルターの方法を教えて頂きたいです。 各フォームにIDが1~50000まであり 子フォームAのID1012をクリックをトリガにして、 子フォームBのID1012をフィルターで抽出したいのですが、 どう設定して良いのか分かりません。 確かフィルター名と、条件を設定する所があったと思うのですが、 フィルター名は設定せず、 条件に、[フォーム名]![子フォームB名]![ID]=[フォーム名]![子フォームA名]![ID] と設定すると、データの元がないと言った内容のエラーが出て動きませんでした。 現在、手元にaccessがない為、少し曖昧な質問になってしまい、すいません。 出来れば、設定の例を挙げて頂ければ、幸いです。 質問の背景として、VBAで作成した所、処理速度が遅く、他の処理をマクロに変更すると数倍早くなったので、この処理もマクロで行おうと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

メインフォームとサブフォームの関連付けは フィルターではなくリンク設定でやります。 また子フォーム間のリンクではなく メインフォームとサブフォーム間のリンクで 一つのフォームに複数のサブフォームが設定できます。 1.サブフォームを作成して 2.メインフォームのフォームフッタに[サブフォーム]ツールを配置 3.ガイドに従いリンク親フィールドとリンク子フィールドを設定 尚親フィールドはテーブルプロパティーのインデックスが「重複なし」 でなければなりません 図はメインフォームのデザインモードで子フォーム枠のプロパティーです。

ipyodora
質問者

お礼

お返事が遅くなりすいませんでした。 関連づけは上手く出来ましたが、他に問題が出来てしまったので 少し試してダメなら、またここで質問させてもらいます。

その他の回答 (1)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

図の添付に失敗しました 再挑戦です

関連するQ&A

  • アクセスのフィルタについて

    アクセスのフォーム[フォーム1]にフィルタをかける処理についてですが、入力欄の一つ[データ1]に値が入力されていないものだけを抽出する処理をマクロで行いたいと思っておりますが、上手くいきません。(何も抽出されない) フィルタの命令文を下記で書いておりますが、間違っているでしょうか。 Forms![フォーム1]![データ1] = Null

  • Accessのフォーム上で、フィルタをかけたい。

    商品管理フォームをつくってます。accessは自己流です。 主なテーブル構成は、決済日、仕入先、仕入金額などです。 ここでのフォームのフィールドは、クエリをかけグループ化し、仕入金額は、合計としてます。 そこでですが、2種類のフィルタのかける方法をしたいです。 1つは、決済日ごとにフィルタをかけ小計を出すことです。 例えば決済日が8月10日でフィルタをかけ、仕入先ごとの支払合計金額をだす。 2つめは、決済日が8月10で仕入先をさらにフィルタをかけ支払合計金額をだすことです。 例えば決済日が8月10日で、仕入先が”A”でフィルタをかけ、8月10日の仕入先Aの支払合計金額をだす。 この処理を、別テキストボックスとして、決済日抽出、仕入先抽出、コマンドボタンとして、決済日抽出開始、決済日と仕入先抽出開始をつくりました。 決済日抽出開始のクリック時のマクロビルダとして、フィルタの実行でwhere条件式に[決済日]=[Forms]![販売管理]![決済日抽出]をいれ、できました。 決済日、仕入先抽出開始のクリック時については、上記のwhere式をいれ更にand 以降に同様な考えでいれ、フィルタができました。 そこでですが、コマンドボタンを1つにしてマクロビルダをまとめることをしたいです。 私的には、マクロビルダを1行ずつだったのを、2行(続けて2段の状態)にし、条件式を入れればいいかと思いました。 ただそれだけですと駄目だと思いますので、条件式を入れればいいかなと思いました。 決済日のみを抽出する場合の条件式としては、[仕入先] is null 決済日と仕入先の2つの条件で抽出する場合は、…わかりません。 片方が空欄(仕入先抽出が空欄)のときは、決済日のフィルタ。両方はいってるときは、両方でフィルタというのを1つのコマンドボタンでするのは無理なのでしょうか? 長々となってしまいましたが、よろしくお願い致します。

  • Access2002のフィルタ機能について

    Access2002を使用しています。マクロのフィルタを使って抽出をしたいのですが・・・。 テーブル構造ですが 氏名    備考    備考2 ○○          ㋹ ××    B     ㋹ △△    A     ㋹ ◆◆    B というものがあります。 今したいのは 備考と備考2に条件をいれ抽出させたいのですが どちらにも条件が入るときは抽出されるのですが どちらか一方にのみ条件を入れた場合うまく抽出できません。 たとえば 備考2 で㋹を抽出とした場合。 氏名    備考    備考2 ○○          ㋹ ××    B     ㋹ △△    A     ㋹ 上記結果が必要なのですが 氏名    備考    備考2 ××    B     ㋹ △△    A     ㋹ 結果はこうなります。 フィルタの条件式は [テーブル]![備考2] Like IIf([Forms]![フォーム]![検索]=Null,"*","*" & [Forms]![フォーム]![検索] & "*") And [テーブル]![備考] Like IIf([Forms]![フォーム]![備考検索]=Null,"*","*" & [Forms]![フォーム]![備考検索] & "*") 元のテーブルにデータが入力されていないものが抽出で出てきません。 どーしたらよいのでしょうか??教えてください。

  • アクセス2007 フォームフィルターをレポートにも

    アクセス2007 フォームフィルターをレポートにも フォームA---「家」データ        「家ID」 佐藤さん、斎藤さん、住所、電話等 フォームB---「家族内」データ        各家の家族構成 お父さんの誕生日、お母さんの誕生日などなど「家ID」有り フォームBでフィルターをかけ、「家ID」を元にフォームAで該当するデータを表示させています。 ----------------------------------------------------   Set rs = Forms.フォームB.RecordsetClone   Do Until rs.EOF     フィルタ = フィルタ & "," & rs!家ID rs.MoveNext Loop rs.Close   フィルタ = "家ID IN (" & Mid$(フィルタ, 2) & ")"   DoCmd.OpenForm "フォームA", WhereCondition:=フィルタ, ---------------------------------------------------- ※フィルタは255文字を超える場合有り このフォームAを元に レポートC(はがき宛先)で DoCmd.OpenReport "レポートC", acViewPreview, WhereCondition:=フィルタ(または、forms.フォームA.Filter) とすると「フィルターが長い」とエラーになります。 OpenFormでのWhereCondition:=は長くても受け付けますが、OpenReportの方は受付ないみたいです。 リレーションの知識不足のまま、進めてきたシッペ返しが今きているのですが、 こんな場合どうしたらフォームの検索条件をレポートに反映できるでしょうか?

  • VBAではなく、マクロでのフィルターのかけ方を教え

    accessのVBAではなく、マクロでのフィルターのかけ方を教えてください。 テーブル1には フィールド名:moji データ:テキスト型 文字列1 文字列2 ・ ・ ・ というデータがあります。 テーブル1を基にしたフォームには 画像のように、 コントロールソースにmojiを紐付けたテキストボックスを配置しました。 その際、マクロを実行して「文字列1」を抽出するフィルタの実行をしたいのですが マクロの作り方がわかりません。 マクロのアクションは「フィルタの実行」にしたのですが フィルタ名には何を入れればいいのでしょうか? とりあえずtestと入れました。 次に、Where条件式には [Forms]![フォーム1]![moji]="文字列1" といれました。 この時点ではエラーにならないのですが フォームを開いて、マクロ1を実行すると 「このウィンドウでは"ApplyFilter/フィルタの実行"アクションを実行できません。」 となってしまいます。 マクロの作り方を教えてください。

  • access 2000のマクロビルダで困っています

    access2000のマクロビルダでアドバイスお願いします。 とあるフォームで 「a」というテキストボックスがあります。 条件検索用のボックス「A」を設けて、「検索」というコマンドボタンを作成しました。 このボタンを マウスボタンクリックした時に、マクロビルダで、条件を設定し 抽出するというものです。 これは希望通りに抽出できたのですが、 次に、同じフォームで「b」というテキストボックスを設けて、条件検索用ボックスで「B」を作成しましたが、 これを、「検索」という一つのコマンドボタンで「a」と「b」2つの検索条件を満たす、リストをマクロビルダで作成したいのですが、 やり方がどう頑張っても分かりません。 できれば、マクロビルダで、もし無理なら、VBAでアドバイスを頂ければ大変ありがたいです。 どうかよろしくお願いします。

  • Access2007でフィルタ条件を保存しないようにするには?

    Access2007でシステムを作っています。 表形式のフォームのフォームヘッダにコンボボックスを作成し、 コンボボックスで選択した値でレコードが抽出されるようにしたいのです。 今作っているのは、マクロの「フィルタの実行」でWhere条件のところに条件を入れています。 コンボボックスの更新後処理でそのマクロを実行しています。 フォームを開いて、1回目はうまく動くのですが、コンボボックスの値を変更しても抽出結果が最初と変わりません。 どうすればよいでしょうか? 良い方法があれば教えてください。

  • Accessでフィルタの実行アクションをクリアするには?

    Access2000(Windows版)です。 フォームにWhere条件式を使ってフィルタを実行するマクロを設定しました。(=を使ってクエリのフィールドとフォーム上のフィールドが一致しているものを抽出する内容。フォーム上のボタンのクリック時にマクロを設定し、フォーム上の検索機能として使いたい。) フォームを開いてから1回目はうまく動作するのですが、2回目からは動作しません。1回目に実行した条件が残ってしまっているようです。 これ(残っているフィルタ条件?)を解消する方法はありますでしょうか? 自分ではフォームをいったん閉じるという方法しか思いつけていません。 よろしくお願いします。 ※ちなみにFOM出版の「よくわかるトレーニングテキストAccess2002 3(←ほんとはローマ数字の3)」のp81でひっかかっております。

  • ACCESSのフォームフィルタ

    ACCESS初心者です。 テーブルでフォームフィルタを使ってOR条件をつけてデータを抽出しましたが、解除ボタンで解除できるのですが、次にフィルタボタンを押すと前の条件で抽出されたデータが表示されてしまいます。 何も条件をつけなかった状態に戻すには、データウィンドウに戻るしかないでしょうか?

  • Accessのサブフォームからフォームフィルタを使ってメインフォームも含めたレコードの抽出が出来ないのは何故でしょうか?

    フォームフィルタを利用してサブフォームに入力されている値でレコードの抽出を行いたいのですが、うまくできません。 メインフォームが持っているレコード全てを持ってきます。 メインフォームに含まれているデータが100件なら、それ全てを表示してしまうということです。 私が抽出したいレコードは2件だけです。 メインフォームからフォームフィルタを利用して抽出すると正しい結果が得られます。 これはどうしてでしょうか? サブフォームへの設定が何か足りないのでしょうか? 親・子のフォームのテーブルは同一のものです。 カテゴリーで親と子にフォームを分けました。 親にはクエリはなくて、リレーションシップしたテーブル数種から直接フォームにひっぱってあります。 子は一つのテーブルからクエリを作って、そのクエリからフォームに引っ張っています。 Access2003です。 どなたかご教示いただきますようお願いいたします。

専門家に質問してみよう