VBA 筛选连续表单 - 多个文本框

VBA Filter Contious Form - Multple Textboxes

我正在尝试创建一个使用 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 的无效使用,如果我在每个框中输入字母,我会得到语法错误(缺少运算符)。

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

您在查询中缺少 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