0

我已经为此陷入了困境,并且可能会被告知我以错误的方式进行了处理,但无论如何:

我有一组按钮,我希望用户能够按下这些按钮来自动过滤数据集。按钮应该过滤每一列,但每个按钮都应该在已经存在的任何过滤器之上进行过滤。我可以使用普通的自动过滤器;但是看来我的文本选项有限(仅限于 2 个?)。最重要的是,理想情况下,我希望用户能够在自己的文本中编写以供将来过滤。

因此,我在单独的工作表中构建了一些动态命名范围,当用户输入其他文本(即过滤器将调用的文本短语)时,它们会自动扩展。在下面的示例中,我调用了以下列表之一:“List_of_text_to_be_filtered_1”

关于在任何时候过滤哪些列,我制作了另一个动态命名范围(将范围自动扩展到最后一行),称为“ColumnA”:


Option Explicit
Sub Sort1()

With ActiveSheet
    
     .Range("columnA").AdvancedFilter _
                        Action:=xlFilterInPlace, _
                        CriteriaRange:=Range("List_of_text_to_be_filtered_1")
End With
End Sub

我遇到的问题是我有另一组基本相同的代码,例如


Option Explicit
Sub Sort1()

With ActiveSheet
    
     .Range("columnB").AdvancedFilter _
                        Action:=xlFilterInPlace, _
                        CriteriaRange:=Range("List_of_text_to_be_filtered_2")
End With
End Sub

但是当用户运行它时,高级过滤器会被重置并且不会建立在最后一个过滤器上。有没有办法建立在最后一个高级过滤器上?

如果您想查看我的动态命名范围公式,请告诉我。

谢谢。

编辑:

我已将其更改为使用数组进行自动过滤,但仍然无法正常工作(它似乎选择了列表中的每个项目,但没有显示任何内容):

Sub CellsToArray()
    
    Dim x           As Integer
    Dim myArray     As Variant, lastrow As Long
    
    With Range("Names_backup")
        intFirstCol = .Column
        intlastcol = intFirstCol + .Columns.Count - 1
    End With
    
    With shLists
        lastrow = .Cells(.Rows.Count, ("T")).End(xlUp).Row
    End With
    
    For x = Range("Names_backup").Row To lastrow
        
        myArray = Cells(x, intlastcol).Value
        
        x = x + 1
        
    Next x
    
    With Range("ColumnA")
        intFirstCol = .Column
        intlastcol = intFirstCol + .Columns.Count - 1
    End With
    Range("ColumnA").AutoFilter Field:=intlastcol, Criteria1:=Array(myArray), Operator:=xlFilterValues
    
End Sub

其中 Names_Backup 是包含应用于过滤的文本单词列表的单元格标题。“ColumnA”是我要过滤的列的命名范围。

4

0 回答 0