如何在运行时间之后存储Excel过滤器和排序设置,以便稍后进行设置。换句话说,用户设置他喜欢的过滤器和排序,并且他想要存储它以供其他日使用。然后,他可以调用并在需要时再次使用该排序和过滤器设置。
我有超过2000行和700列数据,所以简单地排除一个值意味着我将在一列上有一个过滤器的1999标准。这是一个仅使用五行而不包括一个值的示例。如果我有700 x 2000,你可以看到角色如何快速建立:
ActiveSheet.Range("$B$4:$B$9").AutoFilter Field:=1, Criteria1:=Array("1", _
"2", "3", "5"), Operator:=xlFilterValues
另请注意,以下在线发现的解决方案是运行时保存和恢复(不是我想要的):
In Excel VBA, how do I save / restore a user-defined filter?
Sub ReDoAutoFilter()
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String
Dim col As Integer
Set w = ActiveSheet
' Capture AutoFilter settings
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2 'simply delete this line to make it work in Excel 2010
End If
End If
End With
Next f
End With
End With
'Remove AutoFilter
w.AutoFilterMode = False
' Your code here
' Restore Filter settings
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter Field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange).AutoFilter Field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Next col
End Sub
我可以使用上面的恢复部分的修改版本,但我必须永久保存/运行后。
我的想法是:
1)每列标准在一个单元格中保存标准:每个单元格的255个字符限制将此选项排除在外。评论具有相同的字符限制。
2)按照列标准在多个单元格中保存标准:太乱了
3)(这将是最好的)在工作表中保存标准和标题名称并实际应用没有数据的标准:我无法使其工作(请注意,数据集太大而无法保存整个用于保存过滤器和排序标准的数据的东西)
4)所以现在我想我必须把这些标准写成一个文本文件,我想避免...因此,我的问题。
我有没有找到或想到的更好的方法?
PS - 已经规定我必须用VBA,无数据库或其他语言编写所有内容。
谢谢!
答案 0 :(得分:0)
chris neilsen(关于我的问题的第一条评论):"重点1:在现代版本的Excel中,VBA可以将最多32767个字符的字符串写入一个单元格(在Excel 2010和#34中测试;
这解决了我。