【问题标题】:Filtering Excel Table with VBA使用 VBA 过滤 Excel 表格
【发布时间】:2017-07-27 22:57:52
【问题描述】:

我正在尝试通过 VBA 自动过滤 Excel 表格。

该表有许多行,当前位于 Sheet2 的 B5:N584 中。 表格的第一列有“国家”作为标题,这就是我要应用过滤器的列。我希望表格根据用户输入的国家名称自动过滤。国家名称将在 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 的公式栏并单击 Enter 而不更改任何内容时才会应用过滤器 - 然后过滤器将应用于下表。

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

谢谢。

【问题讨论】:

    标签: vba excel filter


    【解决方案1】:

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

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

    如果结束

    【讨论】:

    • 感谢您的帮助。如果 A1 在另一张纸上,我该怎么做?如何引用“=Range()”中的另一张表?
    • 您必须将 WOrksheet_Change 事件处理程序放在 other 工作表中,然后将 Range 限定为需要对其进行操作的工作表(例如, Worksheets("Sheet2").Range("B5:...)
    【解决方案2】:

    考虑到您有两张名为 Sheet1 和 Sheet2 的工作表,并且表格位于您指定范围内的 Sheet2 上。

    还假设以下情况...

    1. 用户在 Sheet1 的 A1 中输入国家/地区名称。
    2. 在 Sheet2 上,B2 的标题 Country 与表中 B5 中的标题相同。
    3. Sheet2 上的 B3 有一个公式 =Sheet1!A1

    确保以上所有假设都正确,从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2021-12-19
      • 2012-12-19
      相关资源
      最近更新 更多