Access (VBA)

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

 
(Windows 8 Pro : Access 2016)
コンボボックスとテキストボックスでの抽出
投稿日時: 18/05/30 17:26:58
投稿者: hana_brenda

いつもありがとうございます。ACCESS初心者です。
以前教えて頂きながら作ったDBを参考に新しいDBを作っております。
コンボボックスが3つあり、クエリで上から順に条件が絞られていき、3つめのコンボボックスの条件と、他の6つのテキストボックス(3つずつOR検索、AND検索する)で検索ボタンによりレコードを抽出しようとしております。
テキストボックスの検索はできたのですが、コンボボックスが無視されているようです。
いろいろ試してエラーは出なくなったのですが、コンボボックス部分の抽出はされません。
何が原因なのか分からず、教えて頂けますでしょうか?
 
Private Sub cm_検索_Click()
 
    Dim strCriteria As String
    Dim strSubCriteria As String
    Dim strSubCriteria1 As Byte
     
strCriteria = ""
   
 With Me
  
'cb_発注者区分3で選択した条件でレコードを抽出する
 
If Nz([cb_発注者区分3]) Then
         strCriteria1 = strCriteria1 & " 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 & ")"
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

回答
投稿日時: 18/05/30 17:44:41
投稿者: sk

引用:
Dim strCriteria As String
Dim strSubCriteria As String
Dim strSubCriteria1 As Byte

・strSubCriteria1 という名前の変数が宣言されているが、
 以降のコードで全く使用されていない。
 
・Byte 型の変数として宣言した意図が不明。
 
引用:
If Nz([cb_発注者区分3]) Then
    strCriteria1 = strCriteria1 & " AND [発注者区分3ID] = " & [cb_発注者区分3]
End If

・strCriteria1 という名前の変数はどこにも宣言されていない。
 
・変数 strCriteria1 の値を参照/設定しているのは
 上記のステートメントのみである。
 (それ以降の処理に何の影響も及ぼしていない)
 
・最終的に変数 strCriteria に代入されている文字列式(抽出条件)が
 フォームの Filter プロパティに設定されることになるが、
 変数 strCriteria1 に代入されている文字列式を
 変数 strCriteria の値に追記するコードが一切記述されていない。

投稿日時: 18/05/31 14:43:44
投稿者: hana_brenda

sk様、いつもありがとうございます。
 
 データ型が一致しません、というエラーが出たので「発注者区分3ID」は数字なのでByte形にしてみたのですが、見当違いだったようです。
 「Dim strSubCriteria1 As Byte」は削除し、「strSubCriteria1」の「1」も削除しました。
 コンボボックスの選択肢を選択し、検索を実行すると、「発注者区分3ID」のパラメーターの入力を求められ、該当の数字を入力しても抽出されませんでしたが、原因が分かりました。
 フォームに表示する必要がなかったため、クエリに「発注者区分3ID」を入れ忘れていました。(テーブルを結合したところまでで終わってました。)
 初歩的なミスで申し訳ありませんでした。ありがとうございました。