【问题标题】:How to save filtered data如何保存过滤后的数据
【发布时间】:2020-07-13 21:34:29
【问题描述】:

大家好,我在此 vba 代码中需要帮助,以便我尝试创建 Microsoft 访问。我正在尝试使用 vba 从表中过滤数据,到目前为止我设置的方式是每当发生某个事件时,让用户在字段中输入一个值以过滤该数据列,例如“名字”或“姓氏”。我的问题是,每当我尝试过滤多个字段时,它都不会保存我过滤的前一个字段中的过滤数据。例如,如果我过滤了名字的数据 例如詹姆斯,我会得到一个包含所有名字为詹姆斯的人的表格,但之后当我在这种情况下过滤姓氏时,我使用贝尔它只寻找姓氏为贝尔的人,而不是寻找名字为贝尔的人“James Bell”,因为我已经指定了名字。

Private Sub txtFirstName_Click()

'adds and input box to prompt the user to input the field
first = InputBox("Input Last Name")
'uses the filter feature to pick data source you want to filter such as FirstName
Me.Filter = "FirstName = """ & first & """"

**If Me.Filter = "" Then
Me.Filter = "FirstName = """ & first & """"
Else
Me.Filter = Me.Filter & " AND FirstName = """ & first & """"
End If**

FilterOn = True

End Sub

Private Sub txtLastName_Click()

last = InputBox("Input Last Name")
Me.Filter = "LastName = """ & last & """"

**If Me.Filter = "" Then
Me.Filter = "LastName = """ & last & """"
Else
Me.Filter = Me.Filter & " AND LastName = """ & last & """"
End If**

FilterOn = True

End Sub 

【问题讨论】:

  • 我已经在上面添加了一个修改版本的代码,如果有人可以看看它会很棒。

标签: ms-access vba


【解决方案1】:

您正在更换两个例程中的过滤器。相反,您想保留旧过滤器并附加“AND ...”它。确保在 AND 周围包含空格。如果没有当前过滤器,则需要跳过 AND。

Private Sub txtFirstName_Click()

'adds and input box to prompt the user to input the field
first = InputBox("Input Last Name")
'uses the filter feature to pick data source you want to filter such as FirstName
If Me.Filter = "" Then
    Me.Filter = "FirstName = """ & first & """"
Else
    Me.Filter = Me.Filter & " AND FirstName = """ & first & """"
End If

FilterOn = True

End Sub

Private Sub txtLastName_Click()

last = InputBox("Input Last Name")
If Me.Filter = "" Then
    Me.Filter = "LastName = """ & last & """"
Else
    Me.Filter = Me.Filter & " AND LastName = """ & last & """"
End If

FilterOn = True

End Sub

【讨论】:

  • 我实现了您建议的代码,但它没有做任何不同当我使用名字和姓氏作为詹姆斯贝尔时,我想从具有该名称但在顶部的表中获得 7 个结果我得到了 3 个相同的结果,其余的在底部,你必须去搜索。这意味着它仍然没有保存我最后过滤的数据。我不知道我是否使用了错误的方式提供的代码,我将编辑我的原始帖子以合并您的代码,以便您查看。
  • 有人能解释一下这个问题吗?
  • 我已经更新了我的帖子以显示代码的放置位置。您可以按 Ctrl-G,然后键入 ? Forms(0).Filter 来查看过滤器中在不同时间实际保存的内容吗?我还建议您将Option Explicit 放在模块的顶部。这将使您声明所有变量,但它有助于找到任何拼写错误的内容。我想知道将FilterOn = True 更改为Me.FilterOn = True 是否会有所不同。
  • 在您再次回答之前,我实际上已经尝试过这种格式的代码。但是当我这样做并输入一个字段值时,即使表中有匹配项,它也找不到任何匹配项。但正如你所要求的那样,我的价值观正在被阅读? Forms(0).Filter LastName="bell" And LastName="bell" And FirstName="james" And LastName="bell" And FirstName="james" And LastName="monroe" And LastName="bell" And LastName= "bell" And FirstName="james" And
  • 我明白了。现在过滤器正在建立,但出现故障。您将需要在某个时候清除该过滤器 - 包括 LastName="bell" AND LastName="monroe" 意味着您根本找不到匹配项。我会创建一个按钮来设置 Me.Filter = ""。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2017-10-04
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多