2013-08-02 77 views
1

我有6個用戶窗體其彈出,並請您選擇您要排序的變量:用戶窗體設置多個篩選條件

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

在每個變量中使用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 

這工作正常,除了我想能夠排序在多個領域。例如,我希望使用客戶端篩選器,然後選擇一個變量,然後使用成本中心用戶窗體同時啓用這兩種排序。

回答

1

我不知道爲什麼你認爲你有問題 - 你可以使用與上面相同的方法,但將過濾器添加到不同的字段。這將過濾兩個。

例如(顯然,你需要適應您的情況):

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 
+0

我會把這個模塊中,並從用戶論壇調用或將其放置在每一個用戶窗體 –

+0

@MichaelDowney這取決於你的對象模型。有些人喜歡在他們的用戶表單中放置「商業」邏輯。我更願意使用用戶表單來計算「參數」,例如對於你的情況 - 指示AULAW過濾器是否應該打開的屬性設置爲true,然後調用用戶表單的「main」過程從這些屬性中拾取所需的參數,並調用實際設置過濾器的相關過程。這樣你集中了'業務邏輯',每個特殊的過濾器用戶表單都以相同的方式工作。 –

+0

@MichaelDowney也可以使用與您已經使用過的相同原理 - >可以使用相同的原則來設置基於多個字段的過濾器。我上面的代碼只是一個演示。你已經正確地製作過濾器值數組等:) –