Vba 基于前一个过滤器的过滤

Vba 基于前一个过滤器的过滤,vba,excel,excel-2010,Vba,Excel,Excel 2010,使用我设置的这段代码,我正在使用过滤器,这些过滤器与带有复选框的用户表单相关,以选择要过滤的内容。当前,如果我过滤一个变量,比如它过滤的实用程序,但是如果我移动到另一个过滤器,比如说客户端,然后我过滤,而不是给我与以前过滤的特定实用程序关联的客户端,那么它会清除所有内容并只过滤客户端 我认为解决方案可能需要处理以下方法: .特殊单元格(xlCellTypeVisible) 我认为重点应该放在添加上 我正在调用一个新值。在对列进行排序后,是否仍要对其进行排序?正如你在下面的图片中所看到的,我希望能

使用我设置的这段代码,我正在使用过滤器,这些过滤器与带有复选框的用户表单相关,以选择要过滤的内容。当前,如果我过滤一个变量,比如它过滤的实用程序,但是如果我移动到另一个过滤器,比如说客户端,然后我过滤,而不是给我与以前过滤的特定实用程序关联的客户端,那么它会清除所有内容并只过滤客户端

我认为解决方案可能需要处理以下方法: .特殊单元格(xlCellTypeVisible)

我认为重点应该放在添加上
我正在调用一个新值。在对列进行排序后,是否仍要对其进行排序?正如你在下面的图片中所看到的,我希望能够对一个列进行排序。然后说能量,然后是工作类型

我不打算重新编写您的代码,但我可以提供实现所需的信息和方法

目前,您只关注一个专栏:

Range("E6:E67").AutoFilter Field:=1, _
您应该将其扩展到整个表区域:

ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=6, Criteria1:="Leeds"
数字6是过滤器范围内的第六列。您还可以创建一个范围引用来引用过滤器范围:

Dim rngFilter As Range
Set rngFilter = Worksheets("Staff List").AutoFilter.Range
过滤器累积,因此以下内容将在两列上进行过滤:

ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=6, Criteria1:="Leeds"
ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=7, Criteria1:="Sales"
在某些时候,您将清除过滤器:

ActiveSheet.ShowAllData
清除单个筛选器只是应用一个没有条件的筛选器:

ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=7
如果将宏录制为对多个列进行排序(使用自定义排序),则会创建如下代码,我在其中添加了一些注释:

'clear the previous Sort
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Clear

'accumulate the SortFields
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
    Range("C6:C112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
    Range("B6:B112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal

'Apply the Sort
With ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With

录制宏还将显示可能对您有用的其他方法和属性。记录的代码不会很优雅,可以显著减少(整理),但它确实提供了有用的信息。

那里有很多代码。如果您提出一个更具体的问题,并确定代码中哪一行与您的问题最相关,则更有可能得到响应。还有其他建议吗?知道将其扩展到整个表可能会这样做。谢谢
'clear the previous Sort
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Clear

'accumulate the SortFields
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
    Range("C6:C112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
    Range("B6:B112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal

'Apply the Sort
With ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With