Рассмотрите возможность настройки кода фильтрации с максимальным количеством критериев, которые вы хотите иметь в виду, например, (здесь показано только 3),
ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=myGroupNameFilter(1), _
Criteria2:=myGroupNameFilter(2),Criteria3:=myGroupNameFilter(3),Operator:=xlOr
Установите UBound для myGroupNameFilter
вто же самое максимальное количество.Используйте цикл чтения критериев для заполнения массива myGroupNameFilter.Заполните элементы myGroupNameFilter, для которых у вас нет значений, со случайными значениями, которые, как вы знаете, не могут существовать в списке для фильтрации, возможно, «XYZ987» или -99999.Фильтр должен возвращать указанный результат, потому что критерии, которые не находят соответствия, не будут влиять на результат.
Я ненавижу публиковать этот код, потому что он точно не будет работать, и у меня нет способа тестирования.Он предназначен просто для того, чтобы показать идею.
Dim Flt(1 To 15) As Variant
For i = 1 To 15
If i > myTable.ListRows Then
' a value which doesn't exist in your Table2
Flt(i) = "123XYZ"
Else
' assign a value on which you intend to filter
Flt(i) = myTable.ListRows(i).Cells(1).Value
End If
Next
ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=Flt(1), _
Criteria2:=Flt(2), _
Criteria3:=Flt(3), _
Criteria4:=Flt(4), _
Criteria5:=Flt(5), _
Criteria6:=Flt(6), _
Criteria7:=Flt(7), _
Criteria8:=Flt(8), _
Criteria9:=Flt(9), _
Criteria10:=Flt(10), _
Criteria11:=Flt(11), _
Criteria12:=Flt(12), _
Criteria13:=Flt(13), _
Criteria14:=Flt(14), _
Criteria15:=Flt(15), _
Operator:=xlOr
Дело в том, что вы не можете установить фильтр в цикле, в котором вы устанавливаете критерии фильтра.