まずフィールド[納期]のデータ型を明記されることをお奨めします。
納期のデータ型は短いテキスト型です。
客先から受け取るCSVデータをインポートすると短いテキスト型になっており、値も"240311”の6桁です。
リアクションでは何を伝えたいのか分かりませんので文章にしていただきますようよろしくお願い致します。
反応がないようなので、管理者権限で削除しておきました。
Hatenaさん、お手数をおかけしてしまい申し訳ありません。 ありがとうございます。
では、とりあえず以下のように修正してみて下さい。
Private Sub btn_検索_Click() Dim StartDueDate As String Dim EndDueDate As String StartDueDate = Trim(Nz([txb_納期検索1], "")) StartDueDate = Replace(StartDueDate, "'", "''", 1, -1, vbBinaryCompare) EndDueDate = Trim(Nz([txb_納期検索2], "")) EndDueDate = Replace(EndDueDate, "'", "''", 1, -1, vbBinaryCompare) Me.Refresh If StartDueDate <> "" And EndDueDate <> "" Then Me.Filter = "([納期] between '" & StartDueDate & "' and '" & EndDueDate & "')" ElseIf StartDueDate <> "" And EndDueDate = "" Then Me.Filter = "([納期] >= '" & StartDueDate & "')" ElseIf StartDueDate = "" And EndDueDate <> "" Then Me.Filter = "([納期] <= '" & EndDueDate & "')" Else Exit Sub End If Me.FilterOn = True btn_解除.SetFocus End Sub
skさん、回答ありがとうございます。 思う通りに動作するようになりました。
StartDueDate = Replace(StartDueDate, "'", "''", 1, -1, vbBinaryCompare)
EndDueDate = Replace(EndDueDate, "'", "''", 1, -1, vbBinaryCompare)
これはどのような操作なのでしょうか?
それぞれの非連結テキストボックスの値の中に含まれている シングルクォーテーション( ' )を Replace 関数によって '' に置換し、更に囲み記号としての ' で囲って 1 つの 文字列リテラルとして解釈されるようにしています。
前述の例ではフィルター条件式における文字列リテラルの囲み記号として シングルクォーテーションを用いていますが、その場合において 「文字列としてのシングルクォーテーション」を文字列リテラルに含めるには '' のように 2 つ続けて記述しなければなりません。
Dim strFilter As String strFilter = "[テキスト型のフィールド名] = 'I''m your father.'" Me.Filter = strFilter Me.FilterOn = True
それぞれの非連結テキストボックスにシングルクォーテーションを含む文字列が 入力された場合、上記のようにエスケープ処理をしておかないと 「文字列としての ' 」ではなく「文字列リテラルの囲み記号の ' 」として 解釈されてしまい、構文エラーが発生する可能性が高くなります。
なるほど、想定していない(この場合だと6桁以外の数字)入力内容だった場合にエラーを回避するための処理ということですね。勉強になります。
不適切なコンテンツとして通報するには以下の「送信」ボタンを押して下さい。 現在このグループでは通報を匿名で受け付けていません。 管理者グループにはあなたが誰であるかがわかります。
どのように不適切か説明したい場合、メッセージをご記入下さい。空白のままでも通報は送信されます。
通報履歴 で、あなたの通報と対応時のメッセージを確認できます。
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
納期のデータ型は短いテキスト型です。
客先から受け取るCSVデータをインポートすると短いテキスト型になっており、値も"240311”の6桁です。
リアクションでは何を伝えたいのか分かりませんので文章にしていただきますようよろしくお願い致します。
反応がないようなので、管理者権限で削除しておきました。
Hatenaさん、お手数をおかけしてしまい申し訳ありません。
ありがとうございます。
では、とりあえず以下のように修正してみて下さい。
skさん、回答ありがとうございます。
思う通りに動作するようになりました。
これはどのような操作なのでしょうか?
それぞれの非連結テキストボックスの値の中に含まれている
シングルクォーテーション( ' )を Replace 関数によって
'' に置換し、更に囲み記号としての ' で囲って 1 つの
文字列リテラルとして解釈されるようにしています。
前述の例ではフィルター条件式における文字列リテラルの囲み記号として
シングルクォーテーションを用いていますが、その場合において
「文字列としてのシングルクォーテーション」を文字列リテラルに含めるには
'' のように 2 つ続けて記述しなければなりません。
それぞれの非連結テキストボックスにシングルクォーテーションを含む文字列が
入力された場合、上記のようにエスケープ処理をしておかないと
「文字列としての ' 」ではなく「文字列リテラルの囲み記号の ' 」として
解釈されてしまい、構文エラーが発生する可能性が高くなります。
なるほど、想定していない(この場合だと6桁以外の数字)入力内容だった場合にエラーを回避するための処理ということですね。勉強になります。