2017-07-31 30 views
1

我需要一種方法來從用戶窗體選框中選擇多個項目。我相信我有一個邏輯錯誤,一旦語句正確,邏輯不會繼續。使用自動篩選器和用戶窗體選擇多個項目

這裏是我目前擁有的代碼:

If flt_type_cb1.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=DOM" 
ElseIf flt_type_cb2.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=AK" 
ElseIf flt_type_cb3.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=HI", Operator:=xlOr, Criteria2:="HI-LH" 
ElseIf flt_type_cb4.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=INTL-ASIA", Operator:=xlOr, Criteria2:="INTL-ASIA-PJ" 
ElseIf flt_type_cb5.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=PS" 
ElseIf flt_type_cb6.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=GU", Operator:=xlOr, Criteria2:="GUMHNL" 
ElseIf flt_type_cb7.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=LATBUS" 
ElseIf flt_type_cb8.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=INTL", Operator:=xlOr, Criteria2:="INTL-PJ" 
End If 

我就比如希望能夠選擇DOM和PS。

+1

通過使用'elseif',當條件滿足,代碼跳過休息。如果您遇到這種情況,您可能需要考慮使用單獨的「if」語句。 – Tehscript

+1

您可以構建過濾器值的字符串應用然後加載像[本答案]中的最後一個選項(https://stackoverflow.com/questions/38404176/using-string-array-as-criteria-in-vba-autofilter #38404521)。要構建字符串值youi可以循環複選框(假設控件是這樣的)和基於複選框編號的測試條件。 –

+0

我對循環邏輯有困難,所以我傾向於做單獨的if語句。如果我沿着if語句路徑,我應該創建一個新變量作爲變體,對於每個真實情況,將字符串添加到變量,然後執行xlFilterValues? 編輯:第二個想法是預定義數組然後設置每個值等於什麼都沒有找到時更好? –

回答

0

我跟着if語句的路徑,即使它可能不是最有效的。

我的代碼就是如下:

Dim flight_type_array As Variant 

flight_type_array = Array("DOM", "AK", "HI", "HI-LH", "INTL-ASIA", "INTL-ASIA-PJ", "PS", "GU", "GUMHNL", "LATBUS", "INTL", "INTL-PJ") 

If flt_type_cb1.Value = False Then 
    flight_type_array(0) = "" 
End If 
If flt_type_cb2.Value = False Then 
    flight_type_array(1) = "" 
End If 
If flt_type_cb3.Value = False Then 
    flight_type_array(2) = "" 
    flight_type_array(3) = "" 
End If 
If flt_type_cb4.Value = False Then 
    flight_type_array(4) = "" 
    flight_type_array(5) = "" 
End If 
If flt_type_cb5.Value = False Then 
    flight_type_array(6) = "" 
End If 
If flt_type_cb6.Value = False Then 
    flight_type_array(7) = "" 
    flight_type_array(8) = "" 
End If 
If flt_type_cb7.Value = False Then 
    flight_type_array(9) = "" 
End If 
If flt_type_cb8.Value = False Then 
    flight_type_array(10) = "" 
    flight_type_array(11) = "" 
End If 

WholeSheetRange.AutoFilter Field:=7, Criteria1:=flight_type_array, Operator:=xlFilterValues