Массив автофильтра, не показывает правильные значения - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь использовать автофильтр в VBA, но когда я пытаюсь использовать приведенный ниже код, он не показывает отфильтрованные значения, он показывает только пробелы.Когда я вручную пишу массив, автофильтр работает.

Dim Filtersheet As Worksheet
Set Filtersheet = Worksheets("Filtersheet")
Dim str As String
Dim Arr As Variant
Dim Lastrow As Integer
Dim d As Long


Lastrow = Filtersheet.Cells(Filtersheet.Rows.Count, "B").End(xlUp).Row

With UserFormFilter
If .CheckBoxXX20.Value = True Then str = Chr(34) & "XX20" & Chr(34) & ","
If .CheckBoxY12.Value = True Then str = str & Chr(34) & "Y12" & Chr(34) & ","
If .CheckBoxZ1212.Value = True Then str = str & Chr(34) & "Z12/12" & Chr(34) & ","
If .CheckBoxXX10.Value = True Then str = str & Chr(34) & "XX10" & Chr(34) & ","
If .CheckBoxV12.Value = True Then str = str & Chr(34) & "V12" & Chr(34) & ","
If .CheckBoxZ2015.Value = True Then str = str & Chr(34) & "Z20/15" & Chr(34) & ","
If .CheckBoxXX1010.Value = True Then str = str & Chr(34) & "XX10/10" & Chr(34) & ","
If .CheckBoxY20.Value = True Then str = str & Chr(34) & "Y20" & Chr(34) & ","
If .CheckBoxZ2012Y20.Value = True Then str = str & Chr(34) & "Z20/12 & Y20" & Chr(34) & ","
End With

str = Left(str, Len(str) - 1)


Filtersheet.Range("A1", "t" & Lastrow).AutoFilter Field:=10, _ Criteria1:=Array(str), Operator:=xlFilterValues

1 Ответ

0 голосов
/ 26 апреля 2019

Вы создаете (разделенную запятыми) строку со значениями фильтра, которые хотите увидеть, и передаете ее в автофильтр.В этой строке вы используете оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...