Вы создаете (разделенную запятыми) строку со значениями фильтра, которые хотите увидеть, и передаете ее в автофильтр.В этой строке вы используете оператор Array
, однако оператор Array
видит только одно значение (содержимое str
) и преобразует его в массив, содержащий только один элемент.Таким образом, вы фильтруете, например, строку "XX20","Y12"
- что приводит к пустой таблице.
Вам нужен массив, в котором есть одна запись для каждого значения вашего списка.Вместо использования Array
вы можете использовать команду Split
, которая разбивает строку на части.Символ кавычки не нужен, так как мы уже имеем дело со строками.
str = ""
With UserFormFilter
If .CheckBoxXX20.Value Then str = str & "XX20" & ","
If .CheckBoxY12.Value Then str = str & "Y12" & ","
(...)
End With
str = Left(str, Len(str) - 1)
Filtersheet.Range("A1", "t" & Lastrow).AutoFilter Field:=10, _
Criteria1:=split(str, ","), Operator:=xlFilterValues