Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2016)
サブフォームの検索をしたい
投稿日時: 18/11/22 13:23:28
投稿者: Cst&Dog

以前も検索について質問をしておりましたが、その後再び検索ができなくなってしまった為質問させていただきます。
  
前回の質問: https://www.moug.net/faq/viewtopic.php?t=77631
  
前回は一つのテーブルを元に作ったフォームにVBAで検索できるようなものを教えて頂きました。
  
現在3つテーブルをサブフォームで表示させているフォームを作成しました。
サブフォーム1に検索結果を反映させ、その結果をクリックすると、
IDで紐づけた他の情報も表示させれる様リンクさせています。
  
サブフォーム1の検索項目は、【名前、メールアドレス1、メールアドレス2、メールアドレス3】
となっています。
  
現在、どんな文字を使って検索をしても、一番件数の多い同名のものしか検索できず、
また、リセットも出来ない状態です。
  
説明が下手で、申し訳ございませんが、ご教授頂けますと幸いです。
何卒宜しくお願い致します。
  
 

Option Compare Database
Option Explicit
 
Private Sub btnSearch_Click()
         
  Dim strCriteria As String
         
  With Me
       If Nz(![検索入力], "") <> "" Then
          strCriteria = "[名前] In (" & _
                       "SELECT tmp.[名前] FROM [TWF_顧客基本情報] tmp" & _
                       " WHERE tmp.[名前] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス2] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス3] Like ""*" & ![検索入力] & "*""" & _
                        ")"
      End If
         
      .Filter = strCriteria
      .FilterOn = (strCriteria <> "")
         
  End With
 
End Sub

回答
投稿日時: 18/11/22 16:27:08
投稿者: hatena
投稿者のウェブサイトに移動

コマンドボタン btnSearch はメインフォームに配置してあるのですか。
だとしたら、現状のコードはメインフォームに対してフィルターをかけています。
 
サブフォームにフィルターをかけるなら、フィルターを設定する部分のコードを下記のようにしてください。
 
      !サブフォームコントロール名.Form.Filter = strCriteria
      !サブフォームコントロール名.Form.FilterOn = (strCriteria <> "")
 
あと、サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」の設定が空欄になっていることも確認ください。

投稿日時: 18/11/22 16:49:15
投稿者: Cst&Dog

ご回答ありがとうございます。
 
空のフォームにボタンを設置し、そこにサブフォームも設置しております。
 

引用:

サブフォームにフィルターをかけるなら、フィルターを設定する部分のコードを下記のようにしてください。

 
こちらは、
 
End If
         
      !TWF_顧客基本情報.Form.Filter = strCriteria
      !TWF_顧客基本情報.Form.FilterOn = (strCriteria <> "") 
         
  End With

 
でよろしいのでしょうか?
 
ご回答何卒宜しくお願い致します。[/quote]

回答
投稿日時: 18/11/22 20:38:23
投稿者: hatena
投稿者のウェブサイトに移動

サブフォームコントロール名が
TWF_顧客基本情報
で間違いないなららそれでいいはずですが、
うまくいきませんでしたか??

投稿日時: 18/11/23 09:56:53
投稿者: Cst&Dog

実行時エラー'3709'
レコードに検索キーがみつかりませんでした。
 
とエラーとなってしまいました。
 
そこが間違っているのでしょうか…。
 
ご教授何卒宜しくお願い致します。

回答
投稿日時: 18/11/23 10:28:58
投稿者: hatena
投稿者のウェブサイトに移動

コード中のどの行でそのエラーがでますか。
 
また、[TWF_顧客基本情報] は、サブフォームのレコードソースに設定してあるテーブル名(Or クエリ名)で間違いないですか。

投稿日時: 18/11/23 11:35:12
投稿者: Cst&Dog

TWF_顧客基本情報はソースオブジェクト名になります。
 
 !TWF_顧客基本情報.Form.Filter = strCriteria
この部分がデバックした際に黄色になります。

回答
投稿日時: 18/11/23 14:38:11
投稿者: hatena
投稿者のウェブサイトに移動

 With Me
       If Nz(![検索入力], "") <> "" Then
          strCriteria = "[名前] In (" & _
                       "SELECT tmp.[名前] FROM [TWF_顧客基本情報] tmp" & _
                       " WHERE tmp.[名前] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス2] Like ""*" & ![検索入力] & "*""" & _
                       " OR tmp.[メールアドレス3] Like ""*" & ![検索入力] & "*""" & _
                        ")"
      End If
          
      !TWF_顧客基本情報.Form.Filter = strCriteria
      !TWF_顧客基本情報.Form.FilterOn = (strCriteria <> "")
          
  End With
 
TWF_顧客基本情報(青字)の部分は、サブフォームの「レコードソース」プロパティに設定してあるテーブル名(or クエリ名)にしてください。
 
TWF_顧客基本情報(赤字)の部分は、サブフォームコントロール名にしてください。
(ソースオブジェクトとはちがいます。)
下記のリンク先を参考にしてください。
 
サブフォームとサブフォームコントロールの違いとは? - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-347.html
 

投稿日時: 18/11/23 15:39:00
投稿者: Cst&Dog

ありがとうございます!
 
赤字はあっていましたが、青字の方が違っていたようで変更したら検索できました!!
 
ご教授ありがとうございました!!