• ベストアンサー

ACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?

(1)部品ID (2)日付 (3)入庫か出庫  以上3つを検索したいのですがどうすればいいでしょうか? (1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。 (2)の日付はテキストBOXに手入力という形です。 (3)の入庫か出庫はコンボBOXで選択するという形です。 検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。 あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。 どのようなコードを記述すればいいでしょうか? よろしくおねがいします

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

>”このオブジェクトに値を代入することはできません”と表示され・・ 失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。 多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。 Private Sub Cmd1_Click() Dim MyCriteria As String MyCriteria = "日付 =" If IsNull(Text2) Then MyCriteria = MyCriteria & True ElseIf Not IsNull(Text2) Then MyCriteria = MyCriteria & "#" & Me!Text2 & "#" Else End If strfilter = MyCriteria strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'" Forms!フォーム名!サブフォーム名.Form.Filter = strfilter Forms!フォーム名!サブフォーム名.Form.FilterOn = True Forms!フォーム名!サブフォーム名.Requery End Sub メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。) これでどうでしょう。

noname#89246
質問者

お礼

お礼が遅くなって申し訳ありません。 できました!!本当に毎回ありがとうございます。 またよろしくおねがいします。

その他の回答 (4)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>抽出条件をサブフォームに表示したいという記述を忘れていました 抽出条件をサブフォームの抽出条件に代入すれば行けるかと思いますが。 strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value" Me.Filter = strFilter Me.FilterOn = True Me.Filter・Me.FilterOnは自分のFilterのセットとなりますのでこの部分を Forms!フォーム名!サブフォーム名.Form.Filter = strFilter Forms!フォーム名!サブフォーム名.Form.FilterOn = True Forms!フォーム名!サブフォーム名.Requery としてみてください。 抽出部分も strFilter = "部品ID Like '*" & [Forms]![フォーム名]![Me.Text1].Value & "*' And MyCriteria And 区分 Like '*" & [Forms]![フォーム名]![Cmb1].Value" にすれば行けるはずですが。

noname#89246
質問者

お礼

何度も質問に答えてくださってありがとうございます。 デバックがでるんです・・・ ”このオブジェクトに値を代入することはできません”と表示され、Me.Filter = strFilterが黄色にマーカーされます。 O_cyan様の回答をそのままコピーしているのでスペルミスではないと思うのですが・・・。 お時間があればまたよろしくおねがいします

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>ACCESSの勉強法やお勧めの本・サイトなど教えていただければありがたいのですが 勉強法といっても特にはないのですが私は自分で考えた処理が動くかどうかSQLでもモジュールでも取りあえず試してみる事にしています。ダメならどこがダメなのか究明する。頭の中で考えた物を記述する感じですが・・。 そのためにはある程度の関数の記述の仕方と関数の概要が分かる本ですかね? Accessで使う私の持っている本はMicrosoftのAccess開発者用のアプリケーションマニュアルとVB開発者用マニュアルの厚さ3Cmくらいの分厚い本くらいですね。あまり読みませんが・・。^_^; 本は関数の便利な使い方みたいな物が多く載っている方が良いと思います。 サイトは結構いろいろあると思いますが一概にどこが良いとは言えません。 すいませんあくまで主観です。

noname#60992
noname#60992
回答No.2

フォームフィルタを使わないとすれば、クエリを作成するのが良いと思います。 データ一覧を参照するのが目的ならば、選択クエリを作成して抽出ボタンなどを押した際にクエリを実行させればよいと思います。 何か他の目的があるのならば、追加クエリなどで一旦テーブルにデータを入れたほうが良いかもしれません。 クエリを作成する前に、抽出条件をきっちり決めなくてはいけません。 出庫・入庫は必ずどちらかが選択されているものとしても、部品IDと日付が両方入力されている場合の抽出条件をANDにするかORにするかによって、クエリの作り方が少し違います。 直接質問には関係ないですけれど、日付を選ぶのには ActiveXのカレンダーコントロールや、DatePickerなどが便利ですよ。 (クエリを実行させる際に抽出条件によってエラーが起きないよう考えておく必要があります。)

noname#89246
質問者

お礼

回答ありがとうございます。 クエリでも出来るのですね。勉強になります。 紹介して頂いたActiveXのカレンダーも使ってみます。 ありがとうございました

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

簡単に処理したいのであれば Filterを使ってやれば出来ます。 部品IDを選択し表示するテキストボックスをText1、日付を入力するコントロールをText2、入庫か出庫をCmb1としてテーブルのフィールド名を区分、検索ボタンをCmd1とした場合。 Cmd1ボタンのクリック時イベントに Private Sub Cmd1_Click() Dim MyCriteria As String MyCriteria = "日付 =" If IsNull(Text2) Then MyCriteria = MyCriteria & True ElseIf Not IsNull(Text2) Then MyCriteria = MyCriteria & "#" & Me!Text2 & "#" Else End If strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value" Me.Filter = strFilter Me.FilterOn = True End Sub としてフォームにFilterをかければ出来ます。 または クエリのWhere句で抽出条件に同様となる記述をしないと出来ません。

noname#89246
質問者

お礼

回答ありがとうございます。 早速試してみます。 O_cyan様には本当にいつも助けられています。 もしよければACCESSの勉強法や、お勧めの本・サイトなど教えていただければありがたいのですが・・・。 またお時間のある時よろしくお願いします

noname#89246
質問者

補足

早速試してみましたができません(>_<) 抽出条件をサブフォームに表示したいという記述を忘れていました。 また回答いただけるとありがたいです。よろしくおねがいします。

関連するQ&A

専門家に質問してみよう