我正在使用名为txtSearch的文本框过滤拆分表单。在文本框的After Update事件中,我插入了以下宏:
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 :(得分:0)
还重置.Filter
属性:
If Nz(Me.txtSearch.Text, "") = "" Then
Me.Filter = "" ' <- add this
Me.FilterOn = False
此外,在您的错误处理程序中,您应该有办法处理所有错误,而不仅仅是那个错误。否则他们将被忽略。
CleanFail:
If Err.Number = 2158 Then
Err.Clear
Me.FilterOn = False
Else
MsgBox Err.Description, "Runtime Error " & Err.Number
End If
Resume CleanExit
答案 1 :(得分: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