使用文本框过滤拆分表单

时间:2016-09-02 11:30:07

标签: vba ms-access

我正在使用名为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时,我可以过滤拆分表单中的数据。但是,在清空文本框以再次显示所有记录时,仅在上一次搜索成功的情况下禁用过滤器。换句话说,如果我在没有匹配记录的文本框中输入内容,即使在清空文本框后仍然没有显示任何记录。

2 个答案:

答案 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