自动筛选器数组,没有显示正确的值

时间:2019-04-26 10:35:00

标签: vba

我试图在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 :(得分:0)

您正在使用您要查看的过滤器值创建一个(逗号分隔)字符串,并将其传递给自动过滤器。您在该字符串上使用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
相关问题