我正在尝试通过VBA自动筛选Excel表。
该表有许多行,当前位于Sheet2的B5:N584中。表的第一列的标题是"Country“,这就是我要应用过滤器的列。我希望该表自动过滤根据国家名称,由用户输入。国家名称将出现在Sheet2的单元格B3上,现在定义为"=Sheet1!A1“,这是用户输入国家的地方。
我希望它的工作方式是:-用户在Sheet1的单元格A1上写一个国家名称。-国家会自动拉取到Sheet2的B3单元格。-在第一列中,根据Sheet2的单元格B3的内容对表进行筛选。
这是我写的VBA代码:
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键。
谢谢。
发布于 2017-07-27 22:45:06
将您的工作表设置为当用户在单元格A1中输入数据时触发代码,这样您就可以检测到此单元格中的更改并触发代码,而不是等待B3更改。
If Target.Address = Range("A1").Address Then
Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")结束If
发布于 2017-07-27 22:57:53
假设您有两个名为Sheet1和Sheet2的表,并且表在您指定的范围内的Sheet2上。
另外,假设以下情况...
确保以上所有假设都是正确的,从Sheet1模块中删除更改事件代码,然后将以下代码放在Sheet2模块上。
Private Sub Worksheet_Calculate()
Sheets("Sheet2").Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets("Sheet2").Range("B2:B3")
End Sub编辑:
实际上,您可以删除工作表引用,因为代码位于Sheet2模块本身。
Private Sub Worksheet_Calculate()
Range("B5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")
End Subhttps://stackoverflow.com/questions/45353988
复制相似问题