2016-09-02 6 views
2

私は、txtSearchというテキストボックスを使用して分割フォームをフィルタリングしています。テキストボックスを使用して分割フォームをフィルタリングする

Private Sub txtSearch_AfterUpdate() 

On Error GoTo CleanFail 

    If Nz(Me.txtSearch.Text, "") = "" Then 
     Me.FilterOn = False 
     Me.txtSearch.SetFocus 
     Exit Sub 
    End If 
    Me.Filter = "Produktnamn like '" + Me.txtSearch.Text + "*' or ATC like '" + Me.txtSearch.Text + "*' or Företag like '" + Me.txtSearch.Text + "*' or Statustxt like '" + Me.txtSearch.Text + "*' or Enhetsnamn like '" + Me.txtSearch.Text + "*' or FullName like '" & _ 
     Me.txtSearch.Text + "*'" 
    Me.FilterOn = True 
    Me.txtSearch.SetFocus 
    Me.txtSearch.SelStart = Len(Nz(Me.txtSearch.Text, "")) + 1 


CleanExit: 
    Exit Sub 


CleanFail: 
    If Err.Number = 2158 Then 
     Err.Clear 
     Me.FilterOn = False 
     Resume CleanExit 
    End If 

End Sub 

は私がtxtSearchにテキストを挿入する際、分割形式でデータをフィルタリングすることができる午前:テキストボックスの更新後のイベントでは、私は次のマクロを挿入しました。ただし、テキストボックスを空にしてすべてのレコードを再度表示すると、以前の検索が成功した場合にのみフィルタが無効になります。つまり、一致するレコードがないテキストボックスに何かを入力すると、テキストボックスを空にしてもまだレコードが表示されません。また

+0

サブに「Me.Requery」を追加しようとしましたか?私は 'Me.FilterOn = False'の直後に配置して、テキストボックスを空にした後にすべてのレコードを元に戻すことを確認します。 – LostReality

+0

まだ動作しません - テキストボックスを空にした後にレコードが返されません... – udden2903

+0

'NZ()'の場合、フィルタを再設定してください: 'Me.Filter =" "'とrequery –

答えて

0

If Me.Recordset.EOF And Me.Recordset.BOF Then Me.FilterOn = Falseの追加が私の問題を解決したようです。

Private Sub txtSearch_AfterUpdate() 

On Error GoTo CleanFail 

If Me.Recordset.EOF And Me.Recordset.BOF Then 
     Me.FilterOn = False 
    Else 
    Me.Filter = "Produktnamn like '" + Me.txtSearch.Text + "*' or ATC like '" + Me.txtSearch.Text + "*' or Företag like '" + Me.txtSearch.Text + "*' or Statustxt like '" + Me.txtSearch.Text + "*' or Enhetsnamn like '" + Me.txtSearch.Text + "*' or FullName like '" & _ 
     Me.txtSearch.Text + "*'" 
    Me.FilterOn = True 
    Me.txtSearch.SetFocus 
    Me.txtSearch.SelStart = Len(Nz(Me.txtSearch.Text, "")) + 1 
End If 

CleanExit: 
    Exit Sub 


CleanFail: 
    If Err.Number = 2158 Then 
     'handle the error - msgbox, whatever 
     Err.Clear 
     Me.FilterOn = False 
     Resume CleanExit 
    End If 

End Sub 
0

リセット.Filterプロパティを:

If Nz(Me.txtSearch.Text, "") = "" Then 
    Me.Filter = ""  ' <- add this 
    Me.FilterOn = False 

また、お使いのエラーハンドラで使用すると、すべてのエラーだけではなく、その特定の1つを処理するための方法を持っている必要があります。それ以外の場合は無視されます。

CleanFail: 
    If Err.Number = 2158 Then 
     Err.Clear 
     Me.FilterOn = False 
    Else 
     MsgBox Err.Description, "Runtime Error " & Err.Number 
    End If 
    Resume CleanExit 
+0

まだまったく同じ問題があります。 – udden2903

関連する問題