やりたいこと:
非連結のチェックボックスでレコードを選択する – hatena chips
・・・のようなこと。
・フォームのテキストボックスに、’354942-00074747′,’354942-00095716′,’354942-00057735’などのように、受注番号の検索キーワードがセットされるように、あらかじめVBAで作ってある。
・コマンドボタンをクリックすると、クエリの抽出条件に、上記のキーワードがIN演算子でセットされて、検索結果が返ってくる(この場合は3件)。
つまづいたこと:
しかし、うまくいかない。
最初、クエリの抽出条件欄に、
IN ([Forms]![楽天未発送].[txtChkList]) としたがダメで。
以下のようなユーザー関数を別途作って、
Public Function retOrderNo() As String r = Replace([Forms]![楽天未発送].[txtChkList], ",", "','") r = Mid(r, 3) retOrderNo = r & "'" ' Debug.Print r & "'" End Function
クエリの抽出条件欄に、
In (RetOrderNO()) や “In (” & RetOrderNO() & “)” としたがやはりダメで。
色々調べていると、BuildCriteria関数を試してみると良さそうなので、使ってみた。
以下のページが参考になった。
パラメータクエリにIn演算子を用いて複数の条件で抽出するための設定 – もう一度学ぶMS-Access
初めてなので慣れていないかもだけど、この関数、イマイチ使い勝手がわからない。
最初、BuildCriteria関数を使いたくなくて、Eval関数だけでやろうとしたが、こんな感じで。
x: Eval([受注番号] In (retOrderNo()))
でも、やっぱりうまくいかない。
最終的には、以下のやり方でうまくいった。
z: Eval(BuildCriteria(“‘” & [受注番号] & “‘”,10,”In (” & retOrderNo() & “)”))
結果オーライだけども、
“‘”のシングルクォーテーションで囲む意味が分からない。
MSのページには、普通にダブルクォーテーションでフィールド名を囲んであったが、同じようにしたら「不明」っているダイアログでエラーが出てうまくいかなかった。