我需要做的是通过使用另一个表的每一行的第二列来筛选整个表。我循环访问的表包含11行,并且代码循环执行11次,但是每次都使用第11行。它需要做的是从第一行到最后一行。
编辑:在Variatus的帮助下,我应用了count
而不是For Each
。这似乎可以遍历除最后一行以外的所有行。 待续。
Edit2:对于那些有好奇心的人,看看我的后续问题,我可以解决所有问题! Filter a table with an array of criteria derived from another table
Sub LoopDoorAfdelingV4()
Dim myTable As ListObject
Dim myTable2 As ListObject
Dim oRow As ListRow
Dim c As Long
Dim myGroupIDFilter As Variant
Dim myGroupNameFilter As Variant
Set myTable = ActiveSheet.ListObjects("TabelGroupID")
Set myGroupIDFilter = myTable.ListColumns(1).Range
Set myGroupNameFilter = myTable.ListColumns(2).Range
Set myTable2 = ActiveSheet.ListObjects("TabelAfdelingenIntern")
For c = 1 To myTable.ListRows.Count
ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=myGroupNameFilter(c), _
Operator:=xlOr
Next c
End Sub
答案 0 :(得分:0)
考虑使用您希望能够处理的最大数量的条件来设置过滤代码,如下所示(此处仅用3个示例进行演示)
ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=myGroupNameFilter(1), _
Criteria2:=myGroupNameFilter(2),Criteria3:=myGroupNameFilter(3),Operator:=xlOr
将myGroupNameFilter
的UBound设置为相同的最大数字。使用循环读取条件填充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
重点是您不能在设置过滤条件的循环中设置过滤器。