4

このコードが期待した結果を生成しない理由を誰かが理解するのを手伝ってくれますか? TxtVendorSearch というテキスト ボックスのあるフォームがあります。

ユーザーがこのテキスト ボックスに入力を開始すると、フォームのサブデータシートで結果のフィルター処理を開始したいと考えています。

完全に入力されたデータシートから始めていますが、結果を残す有効なフィルターを入力し始めるとすぐに、フィルターがすべてを空白にする理由がわかりません。

Private Sub TxtVendorSearch_KeyPress(KeyAscii As Integer)

Dim str1 As String

str1 = "[VendorID] LIKE '*" & Me.TxtVendorSearch.Value & "*' "


Me!subOrderDS1.Form.Filter = str1
Me!subOrderDS1.Form.FilterOn = True

End Sub
4

2 に答える 2

3

同様の問題があり、インターネットで「入力時に検索」および「msアクセス」というキーワードを検索しました

この素晴らしい記事を見つけました。うまくいけば、それはあなたの問題を解決します。

注意: この記事には、使用するソース コードも含まれています。

于 2012-10-26T22:38:00.163 に答える
2

イベントを使用しない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!

于 2012-10-27T09:31:12.543 に答える