我一直在寻找这个 VBA 自动过滤问题的解决方案,任何想法都值得赞赏:
我在命名范围“FslList”中有一个自动过滤条件的静态列表 - 我已将其转换为一维数组,用于自动过滤数据工作表中的第 14 列:
Dim FSLArray As Variant
Dim rngFSL As Range
Set rngFSL = RawData.Worksheets(1).Range("FslList")
FSLArray = rngFSL.Value
With NewBook.Worksheets(1)
.Cells.AutoFilter Field:=14, Criteria1:=Application.Transpose(FSLArray), Operator:=xlFilterValues
一旦我从数组中过滤掉值 - 我需要删除它们
With .AutoFilter.Range
Set DeleteRange = .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
End With
DeleteRange.EntireRow.Delete
NewBook.Worksheets(1).AutoFilterMode = False
End With
我的问题是我的数据列表一直在变化,并不是 FSLArray 中的所有值都在要过滤的列中。因此,一旦遇到不在列表中的条件,自动过滤器就会停止 - 并且在过滤时不包括任何以下条件。
如果在要过滤的数据中找不到数组中的一个或多个元素,我想做的是让自动过滤器继续使用其他数组条件进行过滤。
编辑:我已将数组中的数据从数字(它是)更改为字母 - 现在可以正常使用字母。
我已经尝试重写代码并按照建议定义一个命名范围:
我在数组中的元素(范围 C11:C14)是:
Acc
9158
11958 (this one is not present in the list of data)
15938
15940
命名范围“PODCustList”定义如下:
=OFFSET(Acc,1,0,COUNTA(Settings!$C:$C)-1,1)
代码是一样的:
Dim PODCustArray As Variant
Dim rngPODCust As Range
Set rngPODCust = RawData.Worksheets(1).Range("PODCustList")
PODCustArray = rngPODCust.Value
With Worksheets(1)
.Cells.AutoFilter Field:=7, Criteria1:=Application.Transpose(PODCustArray), Operator:=xlFilterValues
过滤后我得到的回报只是过滤了其中包含“9158”元素的行。
已解决:我需要通过它运行我的数组 -Criteria1:=Split(Join(Application.Transpose(PODCustArray)))
以便自动过滤器将其中的数据正确解释为字符串数组。
我可以调整我的代码,还是需要使用不同的方法?
先感谢您,