用户表单设置多个过滤条件

我有6个用户窗口popup,并要求你select你想要sorting的variables:

  1. ClientFilter
  2. CostCenterFilter
  3. UtilityFilter
  4. TypeOfWorkfilter
  5. AnalystFilter
  6. ProjMgrFilter

在每个variables内部使用if语句。

Sub UpdateCF() Integer_CF = -1 If AU_CF.Value = True Then Add_CF String_CF, "AU" Range("$B$6:$AU$68").AutoFilter _ Field:=2, Criteria1:=String_CF, _ Operator:=xlFilterValues End If If AULaw_CF.Value = True Then Add_CF String_CF, "AULAW" Range("$B$6:$AU$68").AutoFilter _ Field:=2, Criteria1:=String_CF, _ Operator:=xlFilterValues End If ... End Sub Sub Add_CF(String_CF() As String, NewValue As String) Integer_CF = Integer_CF + 1 ReDim Preserve String_CF(Integer_CF) String_CF(Integer_CF) = NewValue End Sub 

这工作正常,除了我想能够sorting在多个领域。 例如,我想要使用“客户端筛选器”,然后select一个variables,然后使用“成本中心”用户窗体同时启用这两种sorting。

我不知道为什么你认为你有问题 – 你可以使用上面的方法,但将filter添加到不同的领域。 这将过滤两个。

例如(显然你需要适应你的情况):

 Sub blah() Dim currentFilters_FirstField Dim currentFilters_SecondField Dim field1_Option1, field1_Option2, field2_Option1, field2_Option2 'just an example Dim rng As Range field1_Option1 = True field1_Option2 = True field2_Option1 = True field2_Option2 = False 'prepare your filters from the menu etc If field1_Option1 Then appendFilterValue currentFilters_FirstField, "AU" If field1_Option2 Then appendFilterValue currentFilters_FirstField, "AULAW" If field2_Option1 Then appendFilterValue currentFilters_SecondField, "Whatever1" If field2_Option2 Then appendFilterValue currentFilters_SecondField, "Whatever2" Set rng = Range("A1:D100") ' range for the filtering etc rng.AutoFilter 1, currentFilters_FirstField, xlFilterValues rng.AutoFilter 2, currentFilters_SecondField, xlFilterValues 'note the different field this is applying to End Sub Sub appendFilterValue(ByRef currentFilters, newFilter) If IsArray(currentFilters) Then ReDim Preserve currentFilters(0 To UBound(currentFilters) + 1) Else ReDim currentFilters(0 To 0) End If currentFilters(UBound(currentFilters)) = newFilter End Sub