• ベストアンサー

ACCESSのフォーム

アクセスのDBに テーブル(T1:レコードが100件) フォーム(F1) フォーム(F2) があります。 F1、F2はT1のデータがリンクされています。 F1を開き(全部で100件)、 フィルタをかけ(20件になる) そのままF1を開いた状態でF2を開くと、 F1でフィルタをかけた状態(20件)で表示させるには どうすればよいでしょうか。

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

  • ベストアンサー
noname#223623
noname#223623
回答No.5

CARDですか。懐かしいですね。まだ具体的には何も考えてないのですが考え方だけ書きます。 > どのフィールドにフィルタをかけるかという基準がないのです。 とのことですが、基準がないと無理でしょう。「CARDではできたのに」と思われるかもしれませんが、ユーザが意識しないだけでCARDは何らかの基準を決めてたはず。で、今回の基準は「最後に実行したフィルタ条件」になるんじゃないですか? だとすれば、基本的な考えとしては次のようになると思います。 [1] フィルタの条件を保存するものを用意する。例としてはメインフォームにテキストボックスを追加する [2]フォームを開くときに、[1]で保存した条件を参照して自分にフィルタをかける [3]フィルタを変更したときは、[1]を更新する フィルタ条件の保存先は、テキストボックスでなくてもよし。VBAでやるなら変数でもOK。ようするに開いたフォームから参照できればどこでもOK。 あとは、どのタイミング(イベント)で条件を保存するのか、逆に、保存された条件をいつ適用するのかが決まればできるんではないでしょうか。

itodai777
質問者

お礼

>>「最後に実行したフィルタ条件」になるんじゃないですか? まさにその通りです。 やり方は上記のようにし、あとはタイミングをいろんな事をしながら図っていきたいと思います。 ありがとうございました。

その他の回答 (5)

noname#79209
noname#79209
回答No.6

フィルタの基準によってフォームを分けているのが良くないのでは? 絞り込んだ結果を表示する内容が同じなら、ひとつのフォーム内で絞り込みアイテムを指定するテキストボックスをいくつかと絞り込み実行ボタンを作れば良いのでは? 絞り込み実行ボタンには、テキストボックスに入力された条件によってフィルタを作り出すプロシージャを組み込んでおきます。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

メインフォーム(F3)に、フィルタ式を記録しておく非表示テキストボックスを設置しておき、各フォームでフィルタを実行したら、そのフィルタ式を保存する、というのはどうでしょうか。 で、展開中のフォームがあればそのフィルタを適用し、新しく展開するフォームのときは展開時に適用、と。 また、フィルタ解除時には上記テキストボックスをNullに戻すようにすれば、「上記テキストボックスがNullかどうか」をフィルタ適用の場合分けの条件に使用できます。

noname#223623
noname#223623
回答No.3

わかりにくいところがあるので補足してください。 1. F1でデータを絞り込んでいるのに、なぜわざわざF2でまた同じデータを表示するのか。表示内容が違うのかな?やることによってはF1だけで処理できるように思います。 2. フィルタで表示件数を絞り込んでいるようですが、Excelと違ってAccessではクエリーを使ったほうが素直な気がします。クエリーを使わない理由はなんでしょう。 3. #1の補足では >フォームは全部で10個あり、どのフォームを最初に開くか解らないのです ということですね。ではF1以外のフォームを開いてF2を開いたらどうなるんでしょう?いきなりF2を開いたときは?つまり、何を基準にしてF2の件数を絞るのかということ。 とりあえず、このへんを明確にすれば的確な回答に近づくと思いますよ。

itodai777
質問者

補足

ご指摘ありがとうございます。 OS:Win2k ACCESS 2000 F1:発注フォーム  F2:納品フォーム F3~F10:その他(よくわからないまとまりのフォーム) F1の内容の商品を発注し、届いたものをF2に入力 その他の雑処理は、F3~F10にその都度入力 T1のキーは伝票番号(a)で、オートナンバーです。 1:T1にはフィールドがa~zまであり F1にはa~g F2にはa,h~m を表示させています。 F1,F2共(F3~F10も)にどのフィールドをフィルタをかけるかその都度変わります。 例1:F1の発注日付(c)でフィルタ→F2で確認 例2:F2の納品日付(h)でフィルタ→F3の担当者等を確認 例3:F3の会社(p)でフィルタ→F1の伝票番号等を確認 例4:F1の発注先(e)でフィルタ→F2、F3で確認 なので、どのフォームを最初に開けるか、又、どのフィールドにフィルタをかけるかという基準がないのです。 表示件数を確認というより、前のフォームで絞られたのを新たに開いたフォームで確認するのが目的です。 最初にフォーム(メインではない)を開いたら、全件(100件)表示されていて、そのフォームをフィルタをかけずに最小化し、次に新たなフォームを開くと全件(100件)。で、2番目に開くフォームでフィルタをかけて(例えば20件)最小化し、今度は3つ目に新たなフォームを開くと20件に。で、1つ目に開いたフォームも20件になってなければいけない。というものです。 実はこれは、The CARD というシステムをACCESSに移行する際、CARDの機能で「検索結果を連結」というのがあり、 その機能をACCESSに実装する上で必要なのです。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.2

バージョンが不明ですが、F3 フォームの btnF2 ボタンのクリック時イベントで F1 フォームが開いているかを確認すればよさそうですね。 If CurrentProject.AllForms("F_利用者").IsLoaded Then   DoCmd.OpenForm FormName:="F2" _           , WhereCondition:=Me.Filter Else   DoCmd.OpenForm FormName:="F2" End If のように。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

> そのままF1を開いた状態でF2を開くと、 F1に作成したコマンドボタンから、F2を開くということでいいのでしょうか? であれば、OpenForm メソッドの、WhereCondition 引数を使えばいいですね。 DoCmd.OpenForm FormName:="F2" _         , WhereCondition:=Me.Filter のようにしてみてください。

itodai777
質問者

補足

すいません、補足します。 MDBを開いたら、メインのフォーム(F3)があり、 そのF3は、どのフォーム(F1 or F2)を開くか選択できるよう(btnF1、btnF2)になってます。 で、btnF1を押してF1フォームを開いてフィルタをかけて btnF2でF2フォームを開くと、件数が絞れてればOKです。 実はF1、F2と書きましたが、フォームは全部で10個あり、どのフォームを最初に開くか解らないのです(その都度変わります)。

関連するQ&A

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

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

  • Accessのフォームについて教えて下さい

    Access 2010のフォームについてお教え下さい。 テーブルにはテーブル名T1、フィールド「ID」、「Price」というテキストボックス。2フィールドがあります。 テーブルの各データは、 ID,Price 001,100 002,200 003,300 フォームにはにフォーム名F1、「cmb」というコンボボックスと、「price」というテキストボックスが配置されています。 「cmb」のデータは値集合ソースで、「SELECT T1.ID FROM T1;」と指定しています。 「cmb」で選択したデータのプライスを「Price」テキストボックスに表示したいと思います。 例えば、「001」を選択したら、「100」と表示されるようにしたいと思います。 色々調べているのですが、どうやってやるのかわかりません。どのように実現したらよろしいでしょうか? よろしくお願いいたします。

  • フィルタ後のフォームの件数の取得の仕方

    あくせすです。 テーブルを元にフォームにデータを表示させているのですが 元データのテーブルのレコード数が100件だとして 今フォーム上で手作業でフィルタをかけて表示しているレコード数が20件だとしたら、 この20件と言う数をVBAで取得する方法を教えてください。 DCountだと、元テーブルの全てのレコード数(フィルタ前)が取得されてしまいます。

  • アクセスのフォームについて

    アクセスのフォームについて教えてください DATAテーブルがあるとします。そのDATAテーブルの、すべてではなく ある項目5種類だけ表示したいと考えています。 ちなみにテーブルのレコードがいくつあるかはわからない状態で すべてのレコードを列挙する予定です。 クエリは訳あって使用できないのが前提なので、VBAでそれを可能としたいのですが ... フォームのレイアウトは下のような感じです =================================================================== DATA画面 AAA BBB CCC DDD EEE FFF GGG HHH III --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 以上がDATAです =================================================================== AAA BBB... が項目名です --- がレコードのそれぞれの明細です。 明細をすべて表示したら"以上がDATAです"と表示して終了です。 前にも書きましたがクエリは使用できません。VBAで実現したいとおもいます。 皆さんすみませんが宜しくお願い致します。

  • 単票フォームと帳票フォームを連動 アクセス

    どういう構成にすればいいか教えてください。 元データはT_testのみですが T_testを元に、単票フォームと帳票フォームを作り、 この二つのフォームをサブフォームにし、1つの親フォームにはめて、 帳票フォームのレコードをクリックする(カレントレコードが変わる)度に 単票フォームは、帳票フォームのデータを表示させたいのですが どうすればいいでしょう? レコードソースは親フォームに設定すればいいのでしょうか? それとも単票フォームと帳票フォームそれぞれにT_testを設定すればいいでしょうか? 帳票フォームのレコードをクリックして単票フォームのデータを表示させる際は、 帳票フォームの値を取得して単票フォームにフィルタをかければいいのでしょうか?

  • access2000でいつのまにかレコードの順番が変わっているんですけど、なぜでしょう?

    visual basicで簡単なデータベースを利用したプログラムを作っています。 データをaccess2000で作っています。 access2000にデータをある程度打ち込んだ後、 visual basicで作ったプログラムでデータにアクセスすると データのトップの位置が変わっています。 アクセス2000で作ったデータのテーブルの中の レコードの順番は、見た目上変わってないのですが visual basicで作ったプログラムからデータにアクセスすると いつのまにか順番が変わっています。 visual basicのなかのadodc1.Recordset.Movefirstで テーブルの1番最初に行こうとすると なぜか途中のデータが1番最初と定義されています。 アクセス2000から、作ったデータのテーブルを開いて ツールバーのレコードからフィルタに行って そこからフォームフィルタをクリックすると テーブル名:フォームフィルタというフォームが表示されますよね。 そこで、表示されるフォームのIDフィールドにある 下向きの三角矢印をクリックすると 作ったデータのIDの順番が変わって表示されています。 いったい何が起こっているのでしょうか?

  • ACCESS2000 フォームとテーブル

    カテゴリを間違っていたので再度ご質問致します。 ACCESSのフォームなんですけど、 フォームとサブフォームがあり、サブフォームの数量の合計をフォームの合計に表示するように出来たのですが、 表示ではなく、テーブルに保存される形にしたいのですが・・。 テーブル T_(1) (1)No. (2)企業名 (3)合計 フォームのレコードソースは、T_(1)です。 今のやり方では、フォームで見ると表示されてますが、 テーブルの合計には保存されてません。 どうすればよいでしょうか? 今は、コントロールソースに、=[サブフォーム名].![テキスト名] にしています。

  • 【ACCESS】フォームのデータでテーブル作成

    写真のようなフォーム上に「既設のフィールドの追加」でテーブルの値を追加し、分割フォームでデータを表示するフォームがあります。その後フォーム上のテーブルでフィルターをかけて、その状態のテーブルに対してクエリなどの処理をしたいと思いっております。 そこでフィルターをかけた状態のテーブルのデータを他のテーブルへ追加または新規作成することは可能でしょうか? 写真だと「フィールド1」をフィルタ「あ」をかけてあだけのデータを表示させてその状態のテーブルを別のテーブルへ追加または新規作成したいです。 実際のテーブルには100以上の項目があり使用者によってフィルタをかける項目も違うため自由にフィルタをかけた状態で別のテーブルへデータを追加したいと考えています。 拙い説明で申し訳ありませんがご指導よろしくお願いいたします。

  • Accessサブフォームの表示について

    はじめまして、yossy136kgと申します。 Microsoft Access2003のメインフォーム、サブフォームに関して下記の件、ご教授願います。 メインフォーム、サブフォームを作成しリンクして、あるテーブルのレコードをサブフォームに表示されることが確認できている状況です。 サブフォームのRecordSourceに設定しているテーブルに【複数件レコードがある】状態に対して、検索条件に満たない場合空の状態でサブフォームは表示出来ています。 確認したいことは、サブフォームのRecordSourceに設定しているテーブルが【0件(レコードがない)】の状態に対して、サブフォームを空の状態で表示することは出来ますでしょうか? 現状、サブフォームは非表示となっています。 ※ダミーデータを入れてそれを表示対象とするしかないのでしょうか? 何かご不明な点がありましたご指摘ください。 以上、宜しくお願い致します。

  • Access2007:フォームからに誤って上書きして元のデータが消えてしまった

    Access2007でフォームから誤って3件のデータを上書きしてしまいました。テーブルのデータが変更されてしまって、元にあったデータがなんて書いてあったのかわからなくなりました。アクセスでは、レコードを移動するたびに自動保存されるので、間違って上書きしたデータが保存されてしまい、元のデータがわからなくなりました。"戻る"ボタンで戻っても、レコードを上書きした後の状態までしか戻せませんでした。このような時、どうすれば元のデータがわかりますか?