在 Excel 中设置和启动自动筛选

在 Excel 中设置和启动自动筛选

我有一个电子表格,它链接到另一个工作簿。问题是,当过滤器打开时,它不会随着新数据的添加而改变;您必须重新过滤数据。

在此处输入图片描述 (点击图片放大)

我知道有一种方法可以使用宏在数据出现时自动过滤。我已经尝试了 5 个小时来弄清楚宏,但始终无法正确执行。我最接近的方法是设置一个过滤器,然后当新数据出现时,它会删除过滤器并将所有数据加在一起。我需要保留过滤器!

Private Sub Worksheet_Change(ByVal Target As Range)

    If Me.FilterMode = True Then
        With Application
           .EnableEvents = False
           .ScreenUpdating = False
        End With

        With ActiveWorkbook
            .CustomViews.Add ViewName:="B2", RowColSettings:=True
          Me.AutoFilterMode = False
            .CustomViews("B2").Show
            .CustomViews("B2").Delete
        End With


         With Application
           .EnableEvents = True
           .ScreenUpdating = True
        End With
    End If

End Sub

答案1

本质上,您需要做的就是通过告诉 Excel 在新的数据范围内过滤相同的条件来“刷新”过滤器。

请注意,使用UsedRange意味着所有数据都位于连续的行和列中。另外,AutoFilter根据需要调整参数。

由于您的数据是通过公式链接的,因此Worksheet_Change公式更新时永远不会触发。您需要使用事件Worksheet_Calculate,但请注意,这将触发每次工作表进行计算,这可能会或可能不会是负担。

我还改变了你的条件IfIF Me.AutoFilterMode = True因为FilterMode如果实际上没有过滤任何内容,即使过滤器已打开,也不会成立。

Private Sub Worksheet_Calculate()

    If Me.AutoFilterMode = True Then

        With Application
           .EnableEvents = False
           .ScreenUpdating = False
        End With

        Me.UsedRange.AutoFilter 2, "North" 'filters column B for myFilter value change as needed

         With Application
           .EnableEvents = True
           .ScreenUpdating = True
        End With

    End If

End Sub

相关内容