在Excel中动态搜索和过滤

时间:2017-03-22 20:09:35

标签: excel vba dynamic filtering search-box

目前我正在尝试使用动态搜索栏和Excel中的过滤功能。 我找到了一个很好的教程,它使用了一个表和Active-X文本框。我已经重新创建了它,当然它确实有效。然而,我的问题是它只考虑一列。现在,我已经创建了另一个表和另一个搜索栏,认为它可以正常工作,但是,由于某种原因它不会。 这是问题所在: 数据集看起来像这样; enter image description here 在“addr1”中搜索包含“1”的单元格(正常工作): enter image description here 在“addr2”中搜索包含“1”的单元格(不起作用): enter image description here

我已经尝试将格式设置为文本,常规,数字等,但似乎没有任何效果。第二次搜索应列出包含“123”的单元格,但不包括。

工作表中的VBA代码:

Private Sub TextBox1_Change()
ActiveSheet.ListObjects("address1").Range.AutoFilter Field:=1, Criteria1:="*"  & [A1] & "*", Operator:=xlFilterValues

End Sub

Private Sub TextBox2_Change()
ActiveSheet.ListObjects("address2").Range.AutoFilter Field:=1, Criteria1:="*" & [B1] & "*", Operator:=xlFilterValues
End Sub

有人有任何解决方案吗?

我的示例文件可以在这里找到: https://www.dropbox.com/s/b4hpsczrhjbe2is/searchbar.xlsm?dl=0

感谢您的任何反馈!

3 个答案:

答案 0 :(得分:1)

在第二个代码中:

Private Sub TextBox2_Change()
ActiveSheet.ListObjects("address2").Range.AutoFilter Field:=1, Criteria1:="*" & [B1] & "*", Operator:=xlFilterValues
End Sub

您应该将Field:=1更改为Field:=2,否则您将在TextBox2_Changeaddr1处搜索内容。

答案 1 :(得分:0)

您现在面临的问题是过滤器"*1*"只匹配字符串,而不是数字。即使您将单元格格式设置为Text已输入的数字仍将被解析为数字;它们不会被转换为字符串。您有两种方法可以输入数字作为字符串:

  • 将格式化为Text后,将其输入

  • 输入前面有一些'(单引号)。即'123。即使单元格的格式为General,这也会强制Excel将其作为字符串。

暂时你可以编写一个简单的宏来将所有表格的数据转换成字符串并从那里开始。

最后,我不明白为什么要为三个相邻列中的每一列定义不同的表。你应该只制作一个有三列的表。

答案 2 :(得分:0)