マイクロソフトアクセス(以下Access)で帳票フォームから色々な条件で検索したり抽出したりするケースは多いかと思います。
Filter機能を使ってVBAから動かしてみましたが、
ココに注意
1つの項目での抽出はできるのに、複数になるとエラー
になってできなかったので備忘録にすることにしました。
1つの項目では抽出できる
はじめに、上の画像のように、「確定」という日本語でFilterを掛けて抽出する方法ですが、
Me.Filter = "confirmed = '" & confirmed_select & "'" Me.FilterOn = True
上のようなVBAでちゃんと抽出することは確認できました。
そして、集荷日検索ですが、
Me.Filter = "[pu_date]=#" & Me.pu_date_mado & "#" Me.FilterOn = True
上のようなVBAでちゃんと抽出できることも確認できました。
複数抽出にするとエラーが出た!
Me.Filter = "confirmed = '" & confirmed_select & "'" And "[pu_date]=#" & Me.pu_date_mado & "#" Me.FilterOn = True
エラー13の型が違うよってエラーになり抽出することができません。
なぜなのでしょうか?
Filter複数抽出する方法
Dim strfilter1 As String Dim strfilter2 As String strfilter1 = "confirmed = '" & confirmed_select & "'" strfilter2 = "[pu_date]=#" & Me.pu_date_mado & "#" Me.Filter = strfilter1 & " And " & strfilter2 Me.FilterOn = True
よくわかりませんが変数をつかってFilterをかけたら期待した結果を抽出することができるようになりました。
今回は、文字と日付の複数条件でしたが、もっと項目が増えたとしても、
参考
strfilter1 & " And " & strfilter2 & "And " & strfilter3 & " And " & strfilter4 & " And " & strfilter5
のようにすれば簡単に複数抽出が可能になると思います。
非連結コンボボックス使用時の注意点
2つの非連結コンボボックス[confirmed_select]、[search_mado]があり、どちらかが選択されている場合と、どちらかが選択されていない場合の抽出が必要な場合があります。
コンボボックスの初期値に、Nullや””を設定してみたりしたりしましたが何だかうまく抽出がされません。
そこで下記のようにしたら、うまくいきました。
Private Sub search_mado_AfterUpdate() Dim strfilter1 As String Dim strfilter2 As String If IsNull(confirmed_select) Or confirmed_select = "" Then Me.Filter = "[s_no]= " & search_mado Me.FilterOn = True Else strfilter1 = "confirmed = '" & confirmed_select & "'" strfilter2 = "[s_no]= " & search_mado Me.Filter = strfilter1 & " And " & strfilter2 Me.FilterOn = True End If End Sub
つまり、VBAコードにNullの時と、””(空)の時を設定して、抽出させました。
コンボボックスにて選択されている場合は、ANDで複数条件抽出になりました。