では、とりあえず以下のように修正してみて下さい。
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さん、回答ありがとうございます。
思う通りに動作するようになりました。
これはどのような操作なのでしょうか?
それぞれの非連結テキストボックスの値の中に含まれている
シングルクォーテーション( ' )を Replace 関数によって
'' に置換し、更に囲み記号としての ' で囲って 1 つの
文字列リテラルとして解釈されるようにしています。
前述の例ではフィルター条件式における文字列リテラルの囲み記号として
シングルクォーテーションを用いていますが、その場合において
「文字列としてのシングルクォーテーション」を文字列リテラルに含めるには
'' のように 2 つ続けて記述しなければなりません。
それぞれの非連結テキストボックスにシングルクォーテーションを含む文字列が
入力された場合、上記のようにエスケープ処理をしておかないと
「文字列としての ' 」ではなく「文字列リテラルの囲み記号の ' 」として
解釈されてしまい、構文エラーが発生する可能性が高くなります。
なるほど、想定していない(この場合だと6桁以外の数字)入力内容だった場合にエラーを回避するための処理ということですね。勉強になります。