イベントを使用しないKeyPress
でください。イベント ハンドラー自体から実際の入力データを簡単に再構築することはできません (イベントがトリガーされたとき、押されたキーはテキスト ボックスのテキストにまだ追加されていません。つまり、あなたは常に最後のキーストロークを短くしています)。
代わりにKeyDown
イベントを使用し、.Text
代わりにテキストボックスのプロパティを使用して.Value
ください。
.Value
フォーカスがボックスから離れたときにのみ設定されます。
したがって、コードは次のように簡単に書き直すことができます (KeyDown イベントがフォームのテキスト ボックスのイベントに設定されていることを確認してください)。
Private Sub TxtVendorSearch_KeyDown(KeyCode As Integer, Shift As Integer)
' If there is no filter criteria, disable filtering '
If Len(Trim(TxtVendorSearch.Text)) = 0 Then
subOrderDS1.Form.FilterOn = False
Exit Sub
End If
' Do nothing if user hits RETURN or TAB '
If KeyAscii < 32 Then
KeyCode = 0
Exit Sub
End If
Dim str1 As String
str1 = "[VendorID] LIKE '*" & Trim$(TxtVendorSearch.Text) & "*'"
subOrderDS1.Form.Filter = str1
subOrderDS1.Form.FilterOn = True
End Sub
Trim()
ユーザーが入力した可能性のある先頭と末尾の空白を削除していました。
最後に、フォームのコード自体からMe.
orを使用する必要はありません。
実行しても害はありませんが、コードに何も追加しないと読みにくくなります。Me!