以下两个子项目;您可以将自动过滤条件保存在表上,并随时恢复它们。
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转换为“常规”。
答案 0 :(得分:0)
我发现了几个与此问题有关的线程。在Excel中似乎是一个限制。请参考以下网址:
我发现了几种适合我情况的解决方案: