質問: strsql
回答: はじめまして(だと思います) 私の書き方が参考になれば 抽出条件が全て and 接続であることから以下の様に書きます。 dim swhere as string swhere = "" if (len(nz(me.txt1)) > 0) then swhere = swhere & " and xxx1 like '*" & me.txt1 & "*'" ' ☆ end if if (len(nz(me.txt2)) > 0) then swhere = swhere & " and xxx2 like '*" & me.txt2 & "*'" end if if (len(nz(me.txt3)) > 0) then swhere = swhere & " and xxx3 like '*" & me.txt3 & "*'" end if if (len(swhere) > 0) then swhere = " where " & mid(swhere, 6) '★ テキストボックス txt1 ~ txt3 をチェックして、文字があれば条件を生成します。 みそは、swhere に条件を作っていきますが、1つ目の生成(☆)でも、先頭に and を付加します。 これは、どの条件で生成されていても ★ 部分で、先頭の and を削除した形で where を作成するためのものになります。 ( and ・・・・・・ and ・・・・・・・ を where ・・・・・・ and ・・・・・・・ へ) で、strsql = consql & swhere として完成になります。 これを踏まえて、ご質問の > '「テキスト1」の入力値を元に、where条件句を作成 > if strcnd <> "" then > '条件指定時は曖昧検索 > strwhr = strwhr & " " & strwhi & " 起票日 like '*" & strcnd & "*'" > end if strwhi が何者か?わかりません。 "where" であるのなら、if でスキップしたら "where" は存在しないことになります。 後を見ても "where" を付けているところは見当たりません。 strsql = consql & vbcrlf & strwhr の後にでも、 debug.print strsql として、どのような文字列が生成されているか確認した方が良いと思います。 (もしくは、msgbox で strsql を表示させるとか) strsql を2か所の recordsource に設定しているようですが、 何をされたいのかわからないので、ここについてはコメントできません。 ※vbaへのコメントは、処理を読むのに邪魔にならない程度がいいと思います。 '条件指定時は曖昧検索 とかは要らないと思います。(逆に、あると読みにくいと思います) ・・・・like '*" & strcnd & "*'" を見ればわかるので、、