|
>Me.Filter = Mid(strFilter, 8)でひっかかり、
このコードを
strFilter = Mid(strFilter, 8)
Me.Filter = strFilter
に変えてください。
そして、前回のレスで紹介した「Debug.Print ××」のコードを
「strFilter = Mid(strFilter, 8) 」のコードの前後に入れてください。
その上で、イミディエイトウインドウにどのような文字列が表示されるのか
確認してみてください。
>イミディエイトウィンドウには
>Mid関数前: AND Me.txt利用者ID=100250001 AND Me.開始日 >= ## AND Me.終了日 <= ##と
>表示されています。
エラーになる一つの原因は、「Me.txt利用者ID」です。
Filterプロパティに設定する文字列の基本は、
フィールド名 = 値
です。
「Me.txt利用者ID」は、フィールド名ではなく、テキストボックス名です。
「Me.txt利用者ID」の部分をフィールド名へと変えてください。
フィールドとテキストボックスをごっちゃにしている人をよく見かけますが、
両者は全然別のものなので、きちんと区別する必要があります。
フィールド名は、テーブル又はクエリにおける列の見出しのことです。
フォームには、フィールドという概念はありません。
また、書いてよいフィールド名は、
フォームのレコードソースたるテーブル又はクエリに存在するフィールド名に限ります。
「Me.開始日」や「Me.終了日」についても同様です。
もう一つの原因は、「Me.開始日 >= ## 」です。
#と#の間には、例えば「2015/03/24」のような文字列が入っていなければいけないわけですが、
それが入っていないということです。
>上記で教えていただいたように、IsNullをIsDateに変更させていただきました。
おそらく、「If Not IsNull(Me.txt開始日) Then」における「IsNull」を「IsDate」に
変えただけなんでしょう。
そのようにすれば、「Me.開始日 >= ## 」という条件式が生成されてしまいます。
でも、それではだめですよ。
「If Not IsNull(Me.txt開始日) Then」は、「txt開始日の値がNullでなければ」
という条件なわけですが、
IsDate関数を使うのであれば、「txt開始日の値が日付として使える文字列であれば」という
条件にする必要があります。
IsNull(××)において「××」がNullのときにIsNull関数が何を返すのか、
「××」がNullでなければIsNull関数が何を返すのか、
IsDate(××)において「××」が日付として使用可能な文字列のときに
IsDate関数が何を返すのか、
「××」が日付として使用不可な文字列のときに
IsDate関数が何を返すのか、
をヘルプで確認してみてください。
>フィルター項目が6項目の物ばかりだったので、項目数の数だと思い
>フィルター項目が8あったので、8にしてみました!
ヘルプでMid関数を調べて、Mid関数の2番目の引数が何を意味するものなのか確認してください。
|
|