Access (VBA)

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

 
(Windows 10 Pro : Access 2016)
コンボボックス、テキストボックス、期間指定の検索について
投稿日時: 18/06/04 16:06:35
投稿者: hana_brenda

いつもありがとうございます。access初心者です。
コンボボックスとテキストボックスで検索をする下記のようなフォームがあります。
 
Private Sub cmd_検索_Click()
 
    Dim strCriteria As String
    Dim strSubCriteria As String
   
strCriteria = ""
 With Me
'cb_発注者区分3で選択した条件でレコードを抽出する
    If Nz([cb_発注者区分3]) Then
         strCriteria = strCriteria & " AND [発注者区分3ID] = " & [cb_発注者区分3]
    End If
 'txt検索ワード1,2,3に入力した単語を備考でor検索する
   
    strSubCriteria = ""
   If Nz(![txt_検索ワード1], "") <> "" Then
         strSubCriteria = strSubCriteria & _
                       " OR ([備考] Like '*" & ![txt_検索ワード1] & "*')"
     End If
      
    If Nz(![txt_検索ワード2], "") <> "" Then
         strSubCriteria = strSubCriteria & _
                       " OR ([備考] Like '*" & ![txt_検索ワード2] & "*')"
     End If
      
      If Nz(![txt_検索ワード3], "") <> "" Then
         strSubCriteria = strSubCriteria & _
                       " OR ([備考] Like '*" & ![txt_検索ワード3] & "*')"
     End If
     
If strSubCriteria <> "" Then
             '先頭の " OR " を取り除く
            strSubCriteria = Mid(strSubCriteria, 5)
 'strSubCriteria に追記された複合 OR 条件全体を AND 条件として追加
            strCriteria = strCriteria & _
                           " AND (" & strSubCriteria & ")" And (" & rs & ")
End If
 
'txt検索ワード1,2,3に入力した単語を備考でOR検索し、txt検索ワード4,5,6はAND検索する
   If Nz(![txt_検索ワード4], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([備考] Like '*" & ![txt_検索ワード4] & "*' )"
     End If
      
   If Nz(![txt_検索ワード5], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([備考] Like '*" & ![txt_検索ワード5] & "*' )"
     End If
        
   If Nz(![txt_検索ワード6], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([備考] Like '*" & ![txt_検索ワード6] & "*' )"
     End If
  
     '先頭の " And " を取り除く
    strCriteria = Mid(strCriteria, 6)
     '変数 strCriteria の値をイミディエイトウィンドウに出力
    Debug.Print strCriteria
   
     With Me.Form
         .Filter = strCriteria
         .FilterOn = (strCriteria <> "")
     End With
End With
End Sub
 
これに、開札日の期間を指定して検索したいのですが、Between And とテキストボックス「txt_開始日」
「txt_終了日」を使うのだろうと思うのですが、使い方が分かりません。
期間だけの指定(他の検索は無視されてしまう)に一度は成功したものの、いじっているうちに、構文エラーで検索できなくなってしまいました。
 
Private Sub Cmd_期間指定_Click()    '期間指定ボタンをクリックした時
    With Me
         '開札日の期間を指定する
          .Filter = "開札日 Between #" & Me.[txt_開始日] & "# And #" & Me.[txt_終了日] & "#"
          .FilterOn = True
     End With
End Sub
 
コンボボックス、テキストボックス、期間指定で検索をし、未入力の場合は全件抽出したいのですが、調べても、クエリを使うものばかりでした。よろしくお願い致します。

回答
投稿日時: 18/06/05 10:23:31
投稿者: sk

引用:
コンボボックス、テキストボックス、期間指定で検索をし、
未入力の場合は全件抽出したい

[Cmd_期間指定]というコマンドボタンを新たに追加しなくても、
cmd_検索_Click プロシージャに「[開札日]に対する And 条件を
変数 strCriteria に追記する」コードを記述なさればよいのでは
ないでしょうか。
 
引用:
期間だけの指定(他の検索は無視されてしまう)に一度は成功したものの、
いじっているうちに、構文エラーで検索できなくなってしまいました。

引用:
With Me
    '開札日の期間を指定する
    .Filter = "開札日 Between #" & Me.[txt_開始日] & "# And #" & Me.[txt_終了日] & "#"
    .FilterOn = True
End With

[txt_開始日]または[txt_終了日]の値が Null、空文字列、
または「日付/時刻として認識できない文字列」だっただからでは。
 
-------------------------------------------------------------------------
Dim strCriteria As String
 
With Me
 
    '[開札日]に対する抽出条件の設定
 
    If IsDate(![txt_開始日]) Then
         strCriteria = strCriteria & " AND ([開札日] >= #" & Format(![txt_開始日], "yyyy/mm/dd") & "#)"
    End If
     
    If IsDate(![txt_終了日]) Then
         strCriteria = strCriteria & " AND ([開札日] <= #" & Format(![txt_終了日], "yyyy/mm/dd") & "#)"
    End If
 
    'ここまで
 
    strCriteria = Mid(strCriteria, 6)
 
    .Filter = strCriteria
    .FilterOn = (strCriteria <> "")
 
End With
-------------------------------------------------------------------------

投稿日時: 18/06/13 16:59:38
投稿者: hana_brenda

sk様、ありがとうございます。
 
cmd_検索_Click プロシージャに[開札日]に対する And 条件を 変数 strCriteria に追記して成功しました。
日付として認識させなければいけなかったんですね。日付として認識されていないことにも気付いていませんでした。
ありがとうございました。