Не думаю, что вам нужно указать, где T: A.
T будет B, когда вы используете класс B: A
Это также известно как CRTP или любопытно повторяющийся шаблон шаблона и является известной идиомой.
Рассмотрите возможность настройки кода фильтрации с максимальным количеством критериев, которые вы хотите иметь в распоряжении, например, так (здесь показано только 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
Дело в том, что вы не можете установить фильтр в цикле, в котором вы устанавливаете критерии фильтра.