首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用VBA过滤Excel表格

用VBA过滤Excel表格
EN

Stack Overflow用户
提问于 2017-07-27 22:38:51
回答 2查看 937关注 0票数 0

我正在尝试通过VBA自动筛选Excel表。

该表有许多行,当前位于Sheet2的B5:N584中。表的第一列的标题是"Country“,这就是我要应用过滤器的列。我希望该表自动过滤根据国家名称,由用户输入。国家名称将出现在Sheet2的单元格B3上,现在定义为"=Sheet1!A1“,这是用户输入国家的地方。

我希望它的工作方式是:-用户在Sheet1的单元格A1上写一个国家名称。-国家会自动拉取到Sheet2的B3单元格。-在第一列中,根据Sheet2的单元格B3的内容对表进行筛选。

这是我写的VBA代码:

代码语言:javascript
复制
    Public Sub Worksheet_Change(ByVal Target As Range)

   If Target.Address = Range("B3").Address Then
       Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")
   End If

End Sub

在单元格B2上,我写了"Country“,就像在列标题中一样。

我所做的几乎是有效的。唯一的问题是过滤器没有自动应用。用户在单元格A1上输入的国家/地区将被拉到Sheet2的单元格B3中,但直到我单击单元格B3的公式栏并单击enter而不做任何更改时,才应用筛选器-然后将筛选器应用于下表。

我想知道是什么阻止了表格自动检测到单元格B2上有一个新的国家,而不必单击该单元格并按ENTER键。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-07-27 22:45:06

将您的工作表设置为当用户在单元格A1中输入数据时触发代码,这样您就可以检测到此单元格中的更改并触发代码,而不是等待B3更改。

代码语言:javascript
复制
   If Target.Address = Range("A1").Address Then
   Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")

结束If

票数 0
EN

Stack Overflow用户

发布于 2017-07-27 22:57:53

假设您有两个名为Sheet1和Sheet2的表,并且表在您指定的范围内的Sheet2上。

另外,假设以下情况...

  1. 用户在A1 on Sheet1中输入国家名称。
  2. on Sheet2 B2的标题Country与表格中B5的标题相同。
  3. B3 on Sheet2的公式=Sheet1!A1

确保以上所有假设都是正确的,从Sheet1模块中删除更改事件代码,然后将以下代码放在Sheet2模块上。

代码语言:javascript
复制
Private Sub Worksheet_Calculate()
    Sheets("Sheet2").Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets("Sheet2").Range("B2:B3")
End Sub

编辑:

实际上,您可以删除工作表引用,因为代码位于Sheet2模块本身。

代码语言:javascript
复制
Private Sub Worksheet_Calculate()
    Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45353988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档