保存和恢复自动过滤条件,日期麻烦

时间:2019-07-18 13:34:35

标签: excel vba autofilter

以下两个子项目;您可以将自动过滤条件保存在表上,并随时恢复它们。

Public Sub SaveFilter()
    Dim Value As Variant
    Dim c As Integer
    Dim Arr As Variant
    ReDim Arr(0)
    Dim t As Variant

    Set cocoll = New Collection
    Set crcoll = New Collection

    With shMain.ListObjects(1).AutoFilter
        If .FilterMode Then
            For c = 1 To .Filters.Count
                If .Filters(c).On Then
                    If IsArray(.Filters(c).Criteria1) Then
                        For Each Value In .Filters(c).Criteria1
                            Arr(UBound(Arr)) = Mid(Value, 2, Len(Value))
                            ReDim Preserve Arr(UBound(Arr) + 1)
                        Next
                        ReDim Preserve Arr(UBound(Arr) - 1)
                    Else
                        Arr(UBound(Arr)) = .Filters(c).Criteria1
                        ReDim Preserve Arr(UBound(Arr) + 1)
                        On Error Resume Next
                        Arr(UBound(Arr)) = .Filters(c).Criteria2
                        If Err <> 0 Then ReDim Preserve Arr(UBound(Arr) - 1)
                        On Error GoTo 0
                    End If

                    cocoll.Add Arr
                    crcoll.Add c
                    ReDim Arr(0)
                End If
            Next
        End If
    End With

    shMain.ListObjects(1).AutoFilter.ShowAllData
End Sub

Public Sub RestoreFilter()
    Dim i As Integer

    For i = 1 To crcoll.Count
        shMain.ListObjects(1).Range.AutoFilter Field:=crcoll.item(i)
        shMain.ListObjects(1).Range.AutoFilter Field:=crcoll.item(i), Criteria1:=cocoll.item(i), Operator:=xlFilterValues
    Next i
End Sub

这是问题所在:当我尝试过滤日期列时,它会引发错误。我尝试了几种格式,例如“ yyyy / mm / dd”,“ dd / mm / yyyy”,“ mm / dd / yyyy”。我以为可以尝试使用“常规” NumberFormat,但如果它已被过滤,则无法将所有隐藏行的NumberFormat转换为“常规”。

1 个答案:

答案 0 :(得分:0)

我发现了几个与此问题有关的线程。在Excel中似乎是一个限制。请参考以下网址:

我发现了几种适合我情况的解决方案: