• 締切済み

アクセスでのコンボボックス複数検索

お世話になります ■判らないこと概要 アクセスで複数のコンボボックスの連結検索させ結果をサブフォームに 出す方法がわかりません。 ■参考 http://www.moug.net/tech/acvba/0060026.htm 上記の例は検索結果がテキストボックスになっていますがサブフォームが理想です。 ■追加機能 1、どのコンボボックスからでも検索できる 2、コンボボックスを一つでも選ぶとサブフォームが自動で絞り込んでいく 可能かどうかもわからず質問しております、わかるかたよろしくお願い申し上げます。

みんなの回答

  • arimama
  • ベストアンサー率50% (6/12)
回答No.6

・最初は全件データを表示しておく ・指定されたコンボボックスに該当するデータを絞り込む(AND条件です。現在データ数が少ないためピンときませんが、同一日付等存在した時一目瞭然です。) ・全データ表示画面に戻すには「初期化」のコマンドボタンを押下する。  BSR123さんの意図していたこととが違っていたら本当にごめんなさい。

BSR123
質問者

お礼

ありがとうございます

BSR123
質問者

補足

ありがとうございます

  • arimama
  • ベストアンサー率50% (6/12)
回答No.5

 たびたびすみません。 テーブルの項目を見て日付型、テキスト型があったので、これを検索条件にした時、From、Toの初期設定大変ですよね。  そこで、コンボボックスがきちんと昇順で表示されているとの前提で、フォームのオープン時のイベントプロシージャーで以下のソースでコンボボックスの最初と最後の値が取得できます。 Private Sub Form_Open(Cancel As Integer) Me![From] = Me![コンボ1].ItemData(0) Me![To] = Me![コンボ1].ItemData(Me![コンボ1].ListCount - 1) Me![サブフォーム名].Requery End Sub itemDataは1件目が0から始まりますので注意して下さい。

BSR123
質問者

お礼

ありがとうございます

BSR123
質問者

補足

ありがとうございます 以前でいていたエラーは解消されましたが 他のえらーがでます(foamが見つかりません) 何度一から作り直してもうまくいかずいきずまりました。

  • arimama
  • ベストアンサー率50% (6/12)
回答No.4

すみません、No.3の Private Sub コンボ0_AfterUpdate() Me![From] = Me![コンボ1] Me![To] = Me![コンボ1] Me![埋め込み1].Requery End Sub のコンボ0はコンボ1の間違いです。

BSR123
質問者

お礼

ありがとうございます

BSR123
質問者

補足

返事遅れてすみません 自分のデータに置き換えようやく完成いたしました。 メールでのファイルありがとうございました。 無知な物にメールアドレスへのリスクなんて全然平気です 本当にありがとうございました

  • arimama
  • ベストアンサー率50% (6/12)
回答No.3

>上記の内容でコンボ1に管理番号が表示しない コンボボックスは非連結にして、値集合ソースに「管理番号検索用」のソース:SELECT データーベース.管理番号 FROM データーベース GROUP BY データーベース.管理番号 ORDER BY データーベース.管理番号;を入れていますか?(ビルダを使用すると便利です) サブフォームのレコードソースは問題ありません。 >コンボ1に値を入力してエンターを押すとマクロを見つけることができません。  サブフォームの名前ですが、フォームの名前をそのまま使っていませんか?ここで指定するサブフォーム/サブレポートの名前は親フォームで埋め込んだサブフォームをプロパティでみることの出来る名前になります。  マクロがみつかりませんというメッセージが出るのは、イベントプロシージャーではなくマクロを指定しているからです。直接更新後処理に書くのではなく、更新後処理でイベントプロシージャーを選択し以下のコーディングをして下さい。 Private Sub コンボ0_AfterUpdate() Me![From] = Me![コンボ1] Me![To] = Me![コンボ1] Me![埋め込み1].Requery End Sub またわからなければ、質問下さい。

BSR123
質問者

お礼

お返事ありがとうございます

  • arimama
  • ベストアンサー率50% (6/12)
回答No.2

No.1です。私の使用しているのがAccess2000なので処理が違っていたらご容赦願います。  (1)親フォームにテキストボックスを追加する。  (2)サブフォームのレコードソースの抽出条件にNo.1の抽出条件を付ける。  (3)親フォーム、開くときのイベントで(1)で作成したテキストボックスへ値を転送(数値型なら、0~99999・・・、フィールドの特性によります。)し、 サブフォームをRequeryします。   me![From]=0 me![To]=99999 me![サブフォームの名前].Requery  (4)コンボボックス更新後のイベント me![From]=me![コンボボックス名] me![To]=me![コンボボックス名] me![サブフォームの名前].Requery  てな感じでどうでしょうか?   

BSR123
質問者

お礼

お返事ありがとうございました

BSR123
質問者

補足

返事ありがとうございます 何度やってもできません下記に情報を記します。 ■テーブル名:データーベース ID オートナンバー主 キー 管理番号 数値 日付 日付/時刻型 名前 テキスト型 記事 テキスト型 ■フォーム名:INDEX コンボ1 管理番号検索用 コンボ2 日付検索用 コンボ3 名前検索用 コンボ4 記事検索用 を生成 試しにコンボ1に 更新前処理:me![From]=0me![To]=99999me![サブフォーム].Requery 更新後処理:me![From]=me![コンボ1]me![To]=me![コンボ1]me![サブフォーム].Requery としました。 テキスト1 を生成 ■サブフォーム名:サブフォーム レコードソースに SELECT データーベース.ID, データーベース.管理番号, データーベース.日付, データーベース.名前, データーベース.記事 FROM データーベース WHERE (((データーベース.管理番号)>=[Forms]![INDEX]![テキスト1FROM] And (データーベース.管理番号)<=[Forms]![INDEX]![テキスト1TO])); としました。 今までずっとやってましたができません;; エラーになります。 再度ご教授くださいお願いします ■エラー及び不具合箇所 上記の内容でコンボ1に管理番号が表示しない コンボ1に値を入力してエンターを押すと 'me![From]=0me![To]=99999me!サブフォーム'マクロを見つけることができません。 とでます。 宜しくお願い申し上げます

  • arimama
  • ベストアンサー率50% (6/12)
回答No.1

各コンボボックスに対し可視=いいえでFrom・Toのテキストボックスを作成し、初期値として、From=最小値、To=最大値をVBAで送り込みます。 サブフォームの元となるクエリに抽出条件を  >=[Forms]![親フォーム名]![テキストボックスFROM] And <=[Forms]![親フォーム名]![テキストボックスTO]  と付けておきます(いくつでもフィールドは選択可能です)。  コンボボックスが選択されるる度に、更新後処理でFrom=コンボボックスの値、To=コンボボックスの値を送り込み、サブフォームをRequeryすれば、該当するデータの絞り込みが可能です。

BSR123
質問者

お礼

早速のお返事ありがとうございます

BSR123
質問者

補足

スミマセン 超初心者なのでコード等よろしくお願いします

関連するQ&A

専門家に質問してみよう