如何在运行时之后存储过滤器和排序设置并在以后使用它们?

时间:2014-04-27 07:30:12

标签: excel vba sorting excel-vba filtering

如何在运行时间之后存储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,无数据库或其他语言编写所有内容。

谢谢!

1 个答案:

答案 0 :(得分:0)

chris neilsen(关于我的问题的第一条评论):"重点1:在现代版本的Excel中,VBA可以将最多32767个字符的字符串写入一个单元格(在Excel 2010和#34中测试;

这解决了我。