我正在尝试通过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上,我写了“国家”,就像在列标题中一样。
我所做的几乎正在发挥作用。唯一的问题是没有自动应用过滤器。单元格A1上的用户输入的国家/地区被拉到Sheet2的单元格B3,但是直到我单击单元格B3的公式栏并单击输入而不更改任何内容时才应用过滤器 - 然后过滤器将应用于下表。
我想知道什么可能阻止表自动检测到单元格B2上有一个新的国家/地区,而无需单击该单元格并按ENTER键。
谢谢。
答案 0 :(得分:0)
设置工作表以在用户在单元格A1中输入数据时触发代码,以便检测此单元格中的更改并触发代码而不是等待B3更改。
If Target.Address = Range("A1").Address Then
Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")
结束如果
答案 1 :(得分:0)
考虑到您有两张名为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 Sub