2017-07-31 31 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