MS Access Tips/Sample and VBA and Blog customize etc...

複数条件の抽出フォームの設計 その1

タイトル画像

フォーム上に複数のフィールドに対する条件を入力するテキストボックスをそれぞれ配置して、その条件で抽出したい。条件未入力の場合は無視したい。

これもよく見かけるFAQに近い物です。このような要望を実現するフォームの設計例を紹介します。。シンプルな例から入り、汎用的なものへ拡張していく予定です。今回はその第1弾です。

難易度:

サンプル仕様

サンプルフォーム外観
FrmFilter_1.png

対象フィールド

フィールド名 データ型 抽出仕様
社員コード 数値型 不等号、Between And 等の演算子入力可
フリガナ テキスト型 部分一致
氏名 テキスト型 部分一致
誕生日 日付/時刻型 2つのテキストボックスで範囲指定
プロフィール メモ型 空白区切りで複数キーワード入力可

帳票フォームのフォームヘッダーに下記のテキストボックスを配置

txt社員コード、txtフリガナ、txt氏名、min誕生日、max誕生日、txtプロフィール

さらに下記のコマンドボタンを配置。
cmdFilter(標題: 抽出)、cmfFilterOff(標題: 抽出解除)

フォームデザインビュー
フォームデザインビュー

フォームモジュール

2010/12/10追記: コードに間違いがありましたので修正しました。
25行目
誤) strFilter = strFilter & " AND 氏名 Like *" & Me.txt氏名 & "*"
正) strFilter = strFilter & " AND 氏名 Like '*" & Me.txt氏名 & "*'"
2013/11/16追記: コードにバグがありましたので修正しました。
38行目
誤) "*" & Replace(Me.txtプロフィール, " ", "* And *") & "*")
正) "*" & Replace(StrConv(Me.txtプロフィール, vbWide), " ", "* And *") & "*")
2014/08/27追記: コードにバグがありましたので修正しました。
29行目、33行目の 生年月日 を 誕生日 に修正

条件入力ボックスが未入力(Null)で無ければ、条件文字列変数(strFilter)に条件を追加していきます。先頭に余分な" And "が付きますので最後でMid関数で削除してます。

社員コードの 演算子 を含む条件は、BuildCriteria関数を利用してます。BuildCriteria関数はフォームに独自の検索機能を実装するでも使用してますので参照ください。

プロフィールの空白区切りで複数キーワード入力できる仕様は、AccessでWEB検索のように曖昧検索したい で紹介した方法を利用してますので、ご参照ください。

補足

このサンプルでは、フォームを開いた直後は全件表示されていますが、1件も表示されていない状態で開きたいという場合は、「開くとき」のイベントプロシージャで下記のように1件も抽出されないようなフィルタを設定します。

また、抽出結果を別フォームで開きたい場合は、上記のコードのハイライト部分(41~46行)を下記のように変更します。

サンプルファイルが下記からダウンロードできます。
FrmFilter_1_07.zip (Access 2007-2010 形式 - 32kb)
FrmFilter_1.zip (Access 2002-2003 形式 - 28kb)
FrmFilter_1_2k.zip (Access 2000 形式 - 28kb)

45 Comments

iccya says..."検索でエラー"

お世話になります。
検索フォームで調べていて 貴殿HPにたどり着きました。
改造していますが、もう少しでできそうです
少し教えてください。
サンプルMDB(FrmFilter_1.zip )をDLして F社員フォームの
氏名欄に”青木”と入れて抽出したところ
==
実行時エラー’2448’:
このオブジェクトに値を代入することはできません。
==
とエラーになります。
デバックをしますと
Me.Filter = Mid(strFilter, 5)
の部分が黄色く反転されます。
なにがわるいのでしょうか?

MS ACCESS 2003 使用です。
よろしくお願い致します

2010.07.28 16:22 | URL | #mQop/nM. [edit]
hatena says..."Re:検索でエラー"

iccyaさん、遅い返事ですみません。

コードに記述間違いがありました。

記事を修正しておきましたのでご参考ください。

2010.12.07 03:09 | URL | #5uE6dEgY [edit]
ey says..."初心者です。"

とてもお世話になっております。
件数の多い一覧表を複数の検索条件で絞り込みをしたくて、web検索をしていたところ貴殿HPにたどりつきました。
とても綺麗な書き方で初心者の私にもすごく分かりやすいです。

ここを見ながら自分のデータベースのフォームを作成していたのですが、どうしてもわからなくて質問させていただいたしだいです。
ぶしつけなのは承知ですので、無視してくださってもかまいません。

元になるクエリの日付を

月: Format([日付],"yyyy-mm")

年 月 で表示させているのですが、それをtxt月というテキストボックスに入力し、cmbfilterボタンを押せば任意の月が出てくるようにするにはどう書けばいいのでしょうか。

どうか宜しくお願いします。

2012.03.27 17:55 | URL | #- [edit]
hatena says..."re: 初心者です。"

月フィールドを利用するなら下記のようなコードを挿入すればいいでしょう。

If Not IsNull(Me.txt月) Then
  strFilter = strFilter & " AND 月='" & Me.txt月 & "'")
End If

件数が多くて、処理が重いようでしたら、日付フィールドにインデックスを設定して、
下記のコードにするといいでしょう。

If Not IsNull(Me.txt月) Then
  strFilter = strFilter & _
  " AND 日付 >= #" & Me.txt月 & "# AND 日付< #" & DateAdd("m",1,Me.txt月) & "#")
End If

  

2012.03.27 22:19 | URL | #5uE6dEgY [edit]
ey says..."御礼が遅くなり大変失礼を致しました。"

仕事場ではインターネットがつながらないので、今日お返事をいただいているのを見ることができました。せっかくすぐに返信をいただいていたのに大変失礼をいたしました。
ほんとうにありがとうございます!さっそく取り組んでみたいと思います。いきなりの質問に答えていただいて本当に感謝しております。これからもここで色々勉強させていただきたいと思います。ほんとうにありがとうございました。

2012.03.31 22:57 | URL | #- [edit]
k.k says...""

いつもお世話になっております。
検索結果をデータシートビューで固定させるにはどうしたらよろしいのでしょうか?
検索までは普通にできるのですが、そこがどうしても変更できません。
どうかご教授いただけますようよろしくお願い致します。

2012.04.16 10:38 | URL | #HxJJe2bw [edit]
hatena says..."re: k.kさん"

「検索結果をデータシートビューで固定させる」とは具体的にどのようなことでしょうか。

もう少し詳細に説明してください。

2012.04.16 10:55 | URL | #5uE6dEgY [edit]
k.k says...""

検索ボタン押した後の表示が単票表示となり、ビューを一度クリックしないとデータシートになりません。
そのためデータシートで検索結果を表示したいと考えております。
よろしくお願いします。

2012.04.17 17:58 | URL | #- [edit]
hatena says..."re:k.kさん"

結果をデータシート表示にしたいのですね。

では、対象テーブルからデータシート表示のフォームを作成して、
記事中の補足の別フォームで開く方法でデータシート表示のフォームを開けばいいでしょう。

条件を入力するフォームは、非連結にしておきます。

2012.04.19 16:25 | URL | #5uE6dEgY [edit]
ey says..."この間はありがとうございました"

この間は複数条件の月ごとの抽出を教えて頂き希望どおりの抽出フォームを作ることができました。本当にありがとうございました。

また壁にぶつかってしまい、あつかましくメールさせていただきました。
 やりたいことは、"月報フォーム"で月を指定して抽出し、10個のクエリをエクセルの1つのbookにそれぞれのクエリ名のシートに出力したいのです。”月: Month([日付])”に”[Forms]![月報フォーム]![cob_月]” で抽出しています。クエリは選択クエリとクロス集計クエリです。ネットで検索して見よう見まねでcodeを書いてみたのですが、うまくいきません。1回目は出力できても、違う月に変更して出力しようとすると、エラーがでます。ネットをさまよいかれこれ2週間以上悩んでいます。どうかご教授いただければ嬉しいです。宜しくお願いいたします。

2012.05.15 01:02 | URL | #- [edit]
hatena says..."re:この間はありがとうございました"

もう少し具体的に状況を説明してもわないと、回答は難しいですね。

また、ここのコメント欄では、このブログ記事についての質問、意見を交換する場所ですので、Access関係の掲示板で、質問された方がよろしいかと思います。

2012.05.23 14:18 | URL | #5uE6dEgY [edit]
すますま says..."複数テーブルの同時検索について"

お世話になります。
いつも参考にさせて頂いており、初心者の私もわかりやすく、
大変助かっております。
突然で恐縮ですが、一点教えて頂けますでしょうか。

上記、テーブルの「社員」を検索していると思いますが、複数のテーブルを同時に検索したいのですが、コードはどう書けばいいでしょうか。

上記を例に具体的に言いますと、

<テーブル>
「社員_本社」「社員_大阪支店」「社員_名古屋支店」の3つから同時に検索。

<検索項目>
上記の通り、社員コード、フリガナ、氏名、誕生日、プロフィールの複数検索。

<検索結果>
上記の通り、「F_社員」の検索結果欄に、検索した複数のテーブルのレコードを表示。

以上、お手数ですがよろしくお願い致します。

2013.01.22 11:06 | URL | #- [edit]
hatena says..."re:複数テーブルの同時検索について"

いまさらの遅いレスで申し訳ありません。見てくれるといいのですが。

「F_社員」のレコードソースを3つのテーブルを下記のようなユニオンクエリで結合したものにすればいいでしょう。

SELECT "本社" AS 店名, * FROM 社員_本社
UNION ALL
SELECT "大阪支店" AS 店名, * FROM 社員_大阪支店
UNION ALL
SELECT "名古屋支店" AS 店名, * FROM 社員_名古屋支店;

ただし、ユニオンクエリにすると更新はできなくなりますので閲覧専用になります。

そもそも、社員テーブルを店ごとに3つに分けるという設計自体がデータベースとしては間違いです。
現在のテーブルに店名フィールドを追加して一つのテーブルにまとめておけばユニオンクエリを使う必要もないし、編集も可能になります。

また店ごとの一覧が必要な場合は、クエリで抽出すればいいだけです。

2013.04.07 15:23 | URL | #5uE6dEgY [edit]
kano says..."別フォームのチェックボックスを抽出条件にしたい"

いつもお世話になっております。
kanoと申します。
投稿日より大分経っており、申し訳ございませんが、
ご指導いただけると幸いです。

上記の記事を参考に抽出フォームを作成し、
別記事(http://hatenachips.blog34.fc2.com/blog-entry-299.html
の都道府県抽出用のフォームと合わせた抽出を行いたいと思っているのですが、
どのように抽出条件とすればよいのでしょうか。

当方、Accessを使い始めて5日目の超初心者なもので、
初歩的かつ失礼な質問かとは思いますが、
よろしくお願いいたします。

2013.09.13 13:43 | URL | #eKems4dw [edit]
hatena says..."re:別フォームのチェックボックスを抽出条件にしたい"

抽出フォームのレコードソースのクエリに、テーブル「T_都道府県抽出用」を追加して、都道府県CD フィールドで結合します。
選択 フィールドの抽出女権を True に設定します。

以上です。

2013.09.13 15:35 | URL | #5uE6dEgY [edit]
itsuki says..."実行時エラー2431と"

はじめまして。かなりお世話になっております。
上記のサンプルファイルからダウンロードし
プロフィールに , や ( を使用するとエラーになってしまいます。どうにか調べてやってみたところうまくいきません。
何か方法はございますでしょうか。
どうかよろしくお願いします。

2013.11.15 23:17 | URL | #- [edit]
itsuki says..."もうしわけございません"

つい先ほど質問したitsukiです。
タイトル欄に関して実行時エラー2431とかきましたが
まったくのまちがいでした。
正しくは2423(半角括弧を使用時のエラー)と2432(,を使用時のエラー)でした。申し訳ございません。

2013.11.15 23:21 | URL | #- [edit]
hatena says..."実行時エラー2431"

半角の (), などを使うと、BuildCriteria関数でエラーになるようです。

コードの37行目の

      strFilter = strFilter & " AND " & BuildCriteria("プロフィール", dbText, _
      "*" & Replace(Me.txtプロフィール, " ", "* And *") & "*")

を下記に修正してください。

      strFilter = strFilter & " AND " & BuildCriteria("プロフィール", dbText, _
      "*" & Replace(StrConv(Me.txtプロフィール, vbWide), " ", "* And *") & "*")

StrConv関数で全角に変換して対処しました。

2013.11.16 01:18 | URL | #5uE6dEgY [edit]
itsuki says..."実行時エラー2431"

教えてもらったとおりやりましたら問題なく無事に動きました。
ありがとうございました。

2013.11.16 21:13 | URL | #- [edit]
かなへー says..."パラメーターとMid(strFilter, 5)"

こんにちは。
フォームの作成で検索していたところ、こちのページにたどり着き、勉強させていただいています。
まだ始めたばかりでよくわかっていないところもありますが、質問させてください。

申し訳ないのですが、2点質問させてください。
1つは、ここでZIPファイル(2007-2010形式)をダウンロードさせていただきました。
誕生日のみ入力し、抽出ボタンをしたところ、「パラメーター入力 生年月日」と表示されました。
どのようにしたら回避できますでしょうか?

もう1つは、補足のところで、以下のように記載がありますが、Mid(strFilter, 5)の意味を教えていただけないでしょうか?数字の部分が特にわかりませんでした。
また、抽出結果を別フォームで開きたい場合は、上記のコードのハイライト部分(41~46行)を下記のように変更します。
DoCmd.OpenForm "フォーム名", , , Mid(strFilter, 5)

よろしくお願いします。

2014.08.27 22:59 | URL | #nIWdzhM2 [edit]
hatena says..."re:パラメーターとMid(strFilter, 5)"

> 1つは、ここでZIPファイル(2007-2010形式)をダウンロードさせていただきました。
> 誕生日のみ入力し、抽出ボタンをしたところ、「パラメーター入力 生年月日」と表示されました。
> どのようにしたら回避できますでしょうか?

コードの 29行目、33行目の 生年月日 を 誕生日 に修正してください。

記事のコードは修正しました。サンプルファイルも修正したものに差し替えました。

> もう1つは、補足のところで、以下のように記載がありますが、Mid(strFilter, 5)の意味を教えていただけないでしょうか?数字の部分が特にわかりませんでした。

複数の条件式をつなげるために、式の前に AND を付けています。
最終的には strFilter には

AND 条件式1 AND 条件式2 AND 条件式3

というような文字列が入りますが、先頭の「 AND 」が不要になりますので、それを削除するためのコードです。

2014.08.27 23:46 | URL | #5uE6dEgY [edit]
かなへー says..."re:re:パラメーターとMid(strFilter, 5)"

こんにちは(^^)

ありがとうございます!
理解できました。

とても勉強になります。
また参考にさせてください。

2014.08.28 12:52 | URL | #nIWdzhM2 [edit]
中山 says..."複数条件抽出したものを印刷したいです"

いつもホームページで勉強させていただいております。

複数の条件抽出をフォーム上で表示することは出来たのですが、そのデータを印刷するレポートの作成方法が分かりません。

レポートを開くボタンに
上記のコードの下に
DoCmd.OpenReport "R顧客一覧", acViewPreview, , strFilter

を入れたのですが、

『実行時エラー '3075':

クエリ式'AND 顧客名 Like '*○○*"の構文エラー : 演算子がありません。'』というエラーが表示されレポートが開きません。

色々試しましたがどうにも開けないのでお問い合わせしました。

2014.11.17 12:56 | URL | #P7C.QHBI [edit]
みのわ says..."サンプルのダウンロード"

初めまして最近ACCESSの勉強を始めました。
検索画面を作成したく探していたところこちらのサイトにたどり着きました。
自分がやりたい事がそのまんまでここしかないと思いました。

ところが、自分で作成してみたところ検索結果を表示する場所の設定が分からなくて、サブフォームを作成してみたのですがうまく表示してくれません。

サンプルをダウンロードし、自分の物と比較しようと思ったのですがダウンロードができませんでした。

ご面倒とは思いますが送って頂く事は可能でしょうか?
よろしくお願いします。

2016.07.14 03:31 | URL | #- [edit]
hatena says..."re:サンプルのダウンロード"

サンプルファイルですが、現在、ファイル置き場のサーバー障害でダウンロードできなくなっています。復旧見込みが度々延長されているので、復旧の見込みはないかも知れません。
現在、別のファイル置き場を検討中ですのでしばらくお待ち下さい。

検索結果の表示ですが、このページのものは、
帳票フォームを作成して、フォームヘッダーに抽出条件を入力するテキストボックス等を配置します。
結果は自身のフォームに表示しています。
その為、自分自身のFilterプロパティに条件を設定しています。

 Me.Filter = Mid(strFilter, 6)
 If strFilter = "" Then
  Me.FilterOn = False
 Else
  Me.FilterOn = True
 End If

もし、サブフォームを配置してそこに結果を表示するなら、
Me の部分を、Me.サブフォームコントロール名.Form に変更すればOKです。

 Me.サブフォームコントロール名.Form.Filter = Mid(strFilter, 6)
 If strFilter = "" Then
  Me.サブフォームコントロール名.Form.FilterOn = False
 Else
  Me.サブフォームコントロール名.Form.FilterOn = True
 End If

2016.07.14 09:10 | URL | #5uE6dEgY [edit]
みのわ says..."サブコントロール名"

迅速なお返事ありがとうございます!

早速Me.部分を変更したのですが「メソッドまたはデータメンバーが見つかりません。」とコンパイルエラーが表示されます。
サブコントロール名の部分が青くなりますので、サブコントロール名が間違っているという事でしょうか?

初歩的な質問になってしまいますが、サブコントロール名が記載してある場所を教えて頂けたらと思います。

Webで検索してみたのですが、サブフォーム名とサブコントロール名は別という事までは理解したのですが、確認の方法がみつかりませんでした。

ご教授頂けたら幸いです。

2016.07.14 17:18 | URL | #- [edit]
みのわ says..."できました!!"

すみません、できました!!

メインフォームとサブフォームの二つのフォームを関連付けていませんでした。関連付けたらちゃんと作動してくれました!

ありがとうございました!!

引き続きサイトにて勉強させて頂きますのでよろしくお願いします。

2016.07.15 01:52 | URL | #- [edit]
mito says..."or条件にした場合"

こちらのサイトを拝見させて頂いて、大変勉強になりました。
and条件については、希望の通りの抽出ができるようになりましたが、そこにor条件も追加して使用できるようにしたいと思い、プロフィール部分のコードのReplace(StrConv(Me.txtプロフィール, vbWide), " ", "* And *") & "*")のANDをORにかえて、複数キーワードと他の項目にキーワードを入れたところ、思うような抽出結果が得られませんでした。
プロフィール1and氏名 プラス プロフィール2のような結果になります。
(プロフィール1or2)and氏名のような結果にするにはどのように書いたらよいか、ご教示頂けませんでしょうか。

どうぞよろしくお願いいたします。

2016.08.10 11:46 | URL | #- [edit]
hatena says..."re:or条件にした場合"

> and条件については、希望の通りの抽出ができるようになりましたが、そこにor条件も追加して使用できるようにしたいと思い、プロフィール部分のコードのReplace(StrConv(Me.txtプロフィール, vbWide), " ", "* And *") & "*")のANDをORにかえて、複数キーワードと他の項目にキーワードを入れたところ、思うような抽出結果が得られませんでした。
> プロフィール1and氏名 プラス プロフィール2のような結果になります。
> (プロフィール1or2)and氏名のような結果にするにはどのように書いたらよいか、ご教示頂けませんでしょうか。

or と and が混在する場合、and が優先順位が高いので、お気づきのように、or条件は () で囲む必要があります。

strFilter = strFilter & " AND " & BuildCriteria("プロフィール", dbText, _
"(*" & Replace(StrConv(Me.txtプロフィール, vbWide), " ", "* OR *") & "*)")

2016.08.10 14:07 | URL | #5uE6dEgY [edit]
mito says..."or条件できました"

教えて頂いた通りのコードで、抽出できました!
括弧でくくるのはなんとなく分かったのですが、どこに入れても構文エラーで上手く出来なかったので、教えて頂いてとても助かりました。これからも色々と参考にさせて頂いて勉強します。本当にありがとうございました。

2016.08.10 15:17 | URL | #- [edit]
Nao says..."OR検索その2"

こんにちは。色々アクセスについて探していて、こちらのページにたどり着きました。とても勉強になっています。 抽出フォームその3の方で同じような質問があったのですが、以下のようなことは可能でしょうか。

If Not IsNull(Me.txt社員コード) Then
strFilter = " AND " & BuildCriteria("社員コード", _
dbLong, Me.txt社員コード)
End If
社員コードを 担当者1か担当者2フィールド(それぞれIDなので、こちらの行を例として利用しました)から検索したい場合です。いまだ初心者のため、その3で書かれた式よりこちらのほうが私にとっては、わかりやすく、こちらで利用する方法をお聞きすることにしまいした。宜しくお願い致します。

2017.03.03 08:43 | URL | #bkosuI9. [edit]
hatena says..."re:OR検索その2"

コメントを見落としていたので、返事が遅くなりました。

> If Not IsNull(Me.txt社員コード) Then
> strFilter = " AND " & BuildCriteria("社員コード", _
> dbLong, Me.txt社員コード)
> End If
> 社員コードを 担当者1か担当者2フィールド(それぞれIDなので、こちらの行を例として利用しました)から検索したい場合です。

OR条件になりますので、下記のように2つの条件式を OR で連結します。

If Not IsNull(Me.txt社員コード) Then
strFilter = " AND (" & _
BuildCriteria("担当者1", dbLong, Me.txt社員コード) & " OR " & _
BuildCriteria("担当者2", dbLong, Me.txt社員コード) & ")"
End If

2017.03.14 15:24 | URL | #5uE6dEgY [edit]
Nao says..."ありがとうございました。"

本当にありがとうございました。m(..)m おかげさまでできました。

2017.03.16 10:53 | URL | #- [edit]
なお says..."誕生日を年/月表示で抽出したいです"

こんにちは
勉強中でネットや本の色々な情報をウロウロしながら
この複数条件の抽出フォームを作成にたどり着きました。
ページを見ながら検索フォームを作成したのですが、
誕生日を 誕生年月:Format([誕生日],”yy/mm”) で 年/月 表示にして、
誕生年月検索のテキストボックスに
年/月(min誕生日) ~ 年/月(max誕生日) で検索を行いたいと考えていますが、可能でしょうか?
初心者の質問で大変申し訳ありません。
どうぞよろしくお願いいたします。

2018.03.24 14:21 | URL | #5tbquqn. [edit]
hatena says..."re: 誕生日を年/月表示で抽出したいです"

> 誕生日を 誕生年月:Format([誕生日],”yy/mm”) で 年/月 表示にして、

この方法は得策ではないですね。演算フィールドにするとインデックスが無効になりますので。

抽出条件でインデックスが無効になる場合 - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-83.html

> 誕生年月検索のテキストボックスに
> 年/月(min誕生日) ~ 年/月(max誕生日) で検索を行いたいと考えていますが、可能でしょうか?

この2つのテキストボックスの「定形入力」プロパティを下記のように設定します。

99\/99;0;_

これで、7004 と数字のみ入力すると、70/04 の表示になります。

コード中の誕生日の条件設定部分を、下記に変更します。

If Not IsNull(Me.min誕生日) Then
  If Me.min誕生日 > Format(Date, "yy/mm") Then
    strFilter = strFilter & " AND 誕生日 >= #" & "19" & Nz(Me.min誕生日) & "#"
  Else
    strFilter = strFilter & " AND 誕生日 >= #" & "20" & Nz(Me.min誕生日) & "#"
  End If
End If

If Not IsNull(Me.max誕生日) Then
  If Me.max誕生日 > Format(Date, "yy/mm") Then
    strFilter = strFilter & " AND 誕生日 < #" & DateAdd("m", 1, "19" & Me.max誕生日) & "#"
  Else
    strFilter = strFilter & " AND 誕生日 < #" & DateAdd("m", 1, "20" & Me.max誕生日) & "#"
  End If
End If

2018.03.24 15:40 | URL | #5uE6dEgY [edit]
なお says..."ありがとうございました。"

詳しく教えていただき本当にありがとうございました。
簡単に 年/月 にすれば月ごとに絞り込みが出来るのでは!と考えていましたが、演算フィールドにするとインデックスが無効になるという事を知りました。
真似だけでは本質が理解出来ていないと思いました。
感謝いたします。

2018.03.25 14:50 | URL | #5tbquqn. [edit]
nobu says..."どうぞよろしくお願い申し上げます"

はじめまして、業務でアクセスを利用することになり、現在奮闘中でございます。
検索フォームを作成しようといろいろ探していたところ、このホームページにたどりつきました。
おかげさまで、あと一歩のところまでたどりついているのですが、どうしても解決できない問題が2カ所ございます。
1つ目は検索項目に勤務先を入力して検索を実行するとなぜかこの項目を入力したときだけダイアログボックスが表示されます。

次に、検索結果は読み取り専用にすることができますでしょうか。
お忙しいところ、本当に申し訳ございませんが、どうかよろしくお願い申し上げます。
またアクセス初心者のため、質問自体が上手く伝わるかどうかも不安です。

Private Sub cmdFilter_Click()
Dim strFilter As String, strExp As String, aryOpe As Variant

If Not IsNull(Me.txt会員番号) Then
strFilter = strFilter & " AND 会員番号 Like '*" & Me.txt会員番号 & "*'"
End If

********************************
途中に同じような設定で検索項目を4つ設定しています
********************************

If Not IsNull(Me.txt勤務先) Then
strFilter = strFilter & " AND 勤務先 Like '*" & Me.txt勤務先 & "*'"
End If

Me.Filter = Mid(strFilter, 6)
If strFilter = "" Then
Me.FilterOn = False
Else
Me.FilterOn = True
End If
End Sub

2018.03.30 18:13 | URL | #- [edit]
hatena says..."re:どうぞよろしくお願い申し上げます"

> 1つ目は検索項目に勤務先を入力して検索を実行するとなぜかこの項目を入力したときだけダイアログボックスが表示されます。

そのダイアログボックスの入力欄の標題はなんですか。
「勤務先」なら、フォームのレコードソースに「勤務先」というフィールドがないのが原因です。

そうでないなら、どのような標題か提示してください。

> 次に、検索結果は読み取り専用にすることができますでしょうか。

デザインビューでフォームの「レコードセット」プロパティを「スナップショット」にしてください。これで読み取り専用になります。

2018.03.30 18:26 | URL | #5uE6dEgY [edit]
nobu says..."re:どうぞよろしくお願い申し上げます"

ありがとうございました。
まさか、こんなに早く回答を頂けるとは・・・・
全て解決しました。
>「勤務先」なら、フォームのレコードソースに「勤務先」というフィールドがないのが原因です。
「勤務先名」でした・・・

>プロパティを「スナップショット」でこちらも解決です。

複数キーワードの検索で本当に困っていたのですが、貴殿のおかげで解決いたしました。
本当にありがとうございました。

2018.03.30 18:54 | URL | #- [edit]
HALCA says..."ナビゲーションフォームの使用"

はじめまして。

こちらのサブフォームの使用の場合のコードを利用させて頂き、
検索はかけられるようになったのですが、

ナビゲーションフォーム名:SF_frm業務
タブ1:frm業務1
タブ2:frm業務2
タブ3:frm業務3
使用クエリ:qry業務 ←(タブ3つとも)

全てデータシートビューで表示。

Me.SF_frm業務.Form.Filter = Mid(strFilter, 5)
If strFilter = "" Then
Me.SF_frm業務.Form.FilterOn = False
Else
Me.SF_frm業務.Form.FilterOn = True
End If

上記コードを入力することで、
開いているタブはフィルターをかけられるのですが、
タブを移動するとフィルターが外れてしまいます。

希望としては、frm業務1でフィルターをかけたら
frm業務2、frm業務3のすべてにフィルターをかけ、維持したいのですが
無理なんでしょうか?
そもそもこの表示方法がだめなのでしょうか・・・

クエリに直接書き込めればよいのですが、
検索条件テキストが7項目あるため、現実的ではありません・・・。

いろいろと調べてみたのですが、良い方法が見つからなかった為、
ご教授頂ければ幸いです。

2018.11.30 16:33 | URL | #kLCZl7R6 [edit]
hatena says...""

ナビゲーションフォームはVBAなしでフォームを切り替え表示できて便利なのですが、
Accessが自動でやってくれているので、VBAで独自の仕様を追加しようとするとうまくいかない場合があるので、私は使っていません。
ですので、推測ですが、
ナビゲーションフォームは、フォームの切り替え時に、表示しているフォーム(サブフォーム?)を閉じて、次に表示するフォームを開くということをしていると推測できますので、フォームを切り替えるたびにフィルターをかけなおす必要があると思います。

2018.11.30 19:05 | URL | #ofj98f56 [edit]
HALCA says..."お返事ありがとうございます"

やはり難しいんですね・・・

それでは、こちらのフォームのテキスト項目を使用しながら
クエリに直接フィルター設定することは、
コードを書き換えれば可能でしょうか?
(可能であれば、どこをどうすればよいかも、お教え頂ければ助かります。)
それともフォームもコードも、考え直すべきでしょうか?

質問ばかりで申し訳ありませんが、
ご回答頂けましたら幸いです。

2018.11.30 22:40 | URL | #kLCZl7R6 [edit]
hatena says..."re:お返事ありがとうございます"

> やはり難しいんですね・・・

いえ、フォームを切り替えるタイミングでフィルターを再設定すればいいと思います。ただ、ナビゲーションフォームを使ったことがないので、そのようなイベントがあるのかはちょっと調べてみてください。

2018.12.01 09:14 | URL | #ofj98f56 [edit]
ぷく says..."氏名検索を漢字とフリガナの複数フィールドで行う場合"

 いつも参考にさせて頂いております。
氏名検索のところで、漢字でもフリガナでも検索できるようにと思い、フィールドを Or で繋げ検索しようとしました。

If Not IsNull(Me.氏名検索) Then
strfilter = strfilter & " AND 氏名 Like ""*" & Me.氏名検索 & "*"" Or フリガナ Like ""*" & Me.氏名検索 & "*"""
End If

すると、氏名の検索は 漢字でもフリガナでも検索することは出来るようになったのですが、
その他の検索項目を入力すると、動作したり、しなかったり・・・・
どの部分に不具合が出ているのか、ご教授頂きたくメール致しました。
よろしくお願いいたします。

2019.07.26 10:04 | URL | #- [edit]
hatena says..."re:氏名検索を漢字とフリガナの複数フィールドで行う場合"

提示のコードには問題なさそうです。
他の部分に原因がありそうです。
現状のコード全文を見ないと原因特定は難しいですね。

ここでは、コードは読みづらいので、下記の掲示板で質問してもらえますか。
その時にコード全文を張り付てけください。

https://zawazawa.jp/ms-access/

2019.07.29 23:17 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
https://hatenachips.blog.fc2.com/tb.php/129-15a0cf40
該当の記事は見つかりませんでした。