条件自动过滤器

时间:2018-12-26 01:55:54

标签: excel vba

每次更改工作表数据时,我都会使用此宏重新应用过滤器:

Private Sub Worksheet_Change(ByVal Target As Range)

   Sheets("SHIFTS").AutoFilter.ApplyFilter

End Sub

仅当数据条目包含特定字符时,我才需要重新应用过滤器。

例如用户可以输入值1,2,3,1S,2S,3S

仅当字符“ S”位于输入值中时,我才需要重新应用过滤器。

1 个答案:

答案 0 :(得分:0)

如果您的 1,2,3,1S,2S,3S 在A列中,则每当输入或粘贴 nS 值时,这应重新应用现有的自动筛选器列A。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A:A"), UsedRange) Is Nothing Then
        On Error GoTo bye
        Application.EnableEvents = False
        Dim t As Range
        For Each t In Intersect(Target, Range("A:A"), UsedRange)
            If CBool(InStr(1, t.Value, "s", vbTextCompare)) Then
                If AutoFilterMode Then _
                    AutoFilter.ApplyFilter
                Exit For
            End If
        Next t
    End If

bye:
    Application.EnableEvents = True
End Sub

如果所有操作均在Worksheet_Change的工作表上执行,则父工作表引用将自动隐含在工作表的私有代码表上。