VBA过滤器连续形式 - 多个文本框

时间:2017-03-08 22:57:36

标签: vba filter access ms-access-2016 continuous-forms

我正在尝试创建一个使用3个文本框的过滤器(tbLastNameFilter,tbFirstNameFilter和tbCompanyFilter。我已成功设法让它与其中一个一起使用。但是,我不确定如何让它在其中工作与其他两个人一致。我尝试了几种方式。

Private Sub bttnSearch_Click()
Dim strFilter As String

If IsNull(Me.tbLastNameFilter & Me.tbFirstNameFilter & Me.tbCompanyFilter) Then
 MsgBox ("No Search Information Entered")
 Me.FilterOn = False
Else
 strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'"
 Me.Filter = strFilter
 Me.FilterOn = True
End If

我尝试将strFilter更改为

strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'" & _
"FirstName Like '*" & Replace(Me.tbFirstNameFilter, "'", "''") & "*'" & _
"Company Like '*" & Replace(Me.tbCompanyFilter, "'", "''") & "*'"

如果我将任何一个框留空,我将无效使用null,如果我将字母放入每个,我会收到语法错误(缺少运算符)。

我希望能够在一个或所有框中输入任何内容,单击搜索并查看匹配的条件。

1 个答案:

答案 0 :(得分:1)

您在查询中缺少AND。但是,在将文本框添加到过滤器之前,还需要检查文本框是否为空。我建议用两个潜艇做这个。

第一个addToFilter操纵控件并将其添加到过滤器(如果它不为空),并且仅在必要时添加AND。这种方法简化了代码,因为它可以解决一些常见的字符串操作。

Sub addToFilter(ByRef sFilter As String, ctrl As Object, fieldName As String)
    If IsNull(ctrl.Value) Then Exit Sub
    If Len(Trim(ctrl.Value)) = 0 Then Exit Sub
    If Len(sFilter) <> 0 Then sFilter = sFilter & " AND "
    sFilter = sFilter & fieldName & " Like '*" & Replace(Trim(ctrl.Value), "'", "''") & "*'"
End Sub

Private Sub bttnSearch_Click()
    Dim strFilter As String
    addToFilter strFilter, Me.tbLastNameFilter, "LastName"
    addToFilter strFilter, Me.tbFirstNameFilter, "FirstName"
    addToFilter strFilter, Me.tbCompanyFilter, "Company"

    If Len(strFilter) = 0 Then
        MsgBox ("No Search Information Entered")
        Me.FilterOn = False
    Else
        Me.filter = strFilter
        Me.FilterOn = True
    End If
End Sub