将字符串变量传递给自动筛选条件数组VBA

时间:2013-11-22 15:19:07

标签: vba

尝试在自动过滤器中使用数组条件时,我再次遇到麻烦。也许有人能够解决它。

我在excel表格中有以下格式的标准字符串:12562,15215(这些由用户编辑)。

我想要做的是循环使每个单元格包含这些条件,并使用单元格内容作为数组自动过滤另一个工作簿中的某个字段,然后转到下一行条件。

循环似乎很好(我可能错了)但是当涉及自动过滤器时,它找不到任何单元格。字符串变量不会正确传递给过滤条件数组(如果我只是将标准硬编码到过滤器 - 一切正常)。

我的代码是否包含一些错误,或整个方法是否存在缺陷?

感谢任何帮助。

Dim ExcRange As Range
Dim Col As Range
Dim Filter1 As Variant
With RawData.Worksheets(1)
.AutoFilterMode = False
End With
Dim Lastrow3 As Integer
Lastrow3 = RawData.Worksheets(1).Cells(Rows.Count, "O").End(xlUp).Row
Set ExcRange = RawData.Worksheets(1).Range("O11:O" & Lastrow3)

For Each Col In ExcRange

    If Not Col Is Nothing Then

    Filter1 = Split(Col.Value, ",")


    With NewBook.Worksheets(1)


        .Cells.AutoFilter Field:=1, Criteria1:=Array(Filter1), Operator:=xlFilterValues, Operator:=xlAnd

    End With

    Else
    End If

Next Col

我也尝试过这样编码自动过滤器:

.Cells.AutoFilter Field:=5, Criteria1:=Filter1, Operator:=xlFilterValues, Operator:=xlAnd

1 个答案:

答案 0 :(得分:1)

我认为你需要两个 - 删除引号并在每个单元格中创建一个数组。您可以通过调用SplitReplace函数来实现此目的。尝试这样做:

Filter1 =Split(Replace(Col.Value, Chr(34), ""), ",")
Filter2 = Split(Replace(Col.Offset(0, 1).Value, Chr(34), ""), ",")
Filter3 = Split(Replace(Col.Offset(0, 2).Value, Chr(34), ""), ",")

并以这种方式保持过滤...Criteria1:=Array(Filter1)...

如果我进行了样品测试,它就有效。