1

我需要让用户使用用户输入到文本框中的值来过滤连续表单。并且连续表单也嵌套在几个级别的导航子表单中。这听起来很简单,但是我在网上找到的所有示例都使用宏而不是 vba。

我设置了结构并为文本框 txtFilter 编写了 AfterUpdate 过程,如下所示:

Private Sub txtFilter_AfterUpdate()
    Dim filterval As String
    filterval = txtFilter.Value
    With Forms!Main!NavigationSubform.Form!NavigationSubform.Form
        .Filter = "LastName Like " & filterval
        .FilterOn = True
    End With
End Sub

我玩过不同的语法,但似乎都不能正常工作。这是从文件共享站点下载数据库相关部分的链接:http: //jmp.sh/v/HGctZ4Ru74vDAjzN43Wq

谁能告诉我如何改变它,以便用户可以使用文本框来过滤连续形式?

4

2 回答 2

2

Option Compare Database
Option Explicit '<- always include this!!!!!

Private Sub txtFilter_AfterUpdate()
    Dim strFilter As String

    ' only set Filter when text box contains something
    ' to search for ==> don't filter Null, empty string,
    ' or spaces
    If Len(Trim(Me.txtFilter.Value & vbNullString)) > 0 Then
        strFilter = "LastName Like '*" & _
            Replace(Me.txtFilter.Value, "'", "''") & _
            "*'"
        ' that Replace() prevents the procedure from breaking
        ' when the user enters a name with an apostrophe
        ' into the text box (O'Malley)
        Debug.Print strFilter ' see what we built, Ctrl+g
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        ' what should happen here?
        ' maybe just switch off the filter ...
        Me.FilterOn = False
    End If
End Sub
于 2013-11-13T21:57:12.390 回答
2

我使用它来工作:.Filter = "LastName Like """ & filterval & """"

有时甚至需要那些烦人的字符串标识符。

好的,要在没有记录的情况下打开表单,然后只提取您(或用户)指定的记录,这是最简单的,只需进行一些返工。(我建议您使用副本而不是原件) 1:在您的连续表格上,删除 Recordsource;我们将使用Late Binding(Kinda)2:然后删除txtFilter框下的代码,然后删除框本身。3:添加一个像这样的组合框作为记录源:( SELECT DISTINCT myTable.LastName FROM myTable ORDER BY myTable.LastName;这将为您提供一个唯一的姓氏列表,因此不需要知道如何拼写名称,而且它确保至少有一个匹配)4:在更新后该组合框的事件,添加如下代码:

Dim strSource As String
strSource = "SELECT mt.IntakeNumber, mt.ClientNumber, " & _
    "mt.LastName, mt.FirstName, mt.ConsultationDate " & _
    " FROM myTable mt " & _
    "WHERE (mt.LastName)= '" & Me.cboFilter.Value & "'"

Me.RecordSource = strSource
Me.Requery

显然,您需要根据需要更改表和字段名称,但希望您明白这一点。

于 2013-11-13T20:51:03.763 回答