数组在VBA中循环而不保留

时间:2018-05-29 06:22:46

标签: arrays excel vba excel-vba loops

以下代码大部分工作正常。它在"列表中搜索我的范围"选项卡,挑出第一个单元格(A1),然后转到我的"成分"选项卡,基于第一个单元格的过滤器,以及在其他位置复制和粘贴信息。

当它循环回来查看第二个单元格(A2)然后再次过滤我的列表时出现问题。它不仅仅按A2进行过滤,但它会记住A1并在两个标准上过滤我的列表!因此它变得累积 - 基于A1,A2和A3的第三个环路滤波器等等......

如何让它忘记数组中的前一行,只关注下一行?

Dim N As Integer
 With Workbooks("file.xlsm").Sheets("list")
    N = .Cells(Rows.Count, "A").End(xlUp).Row
    ReDim ary(1 To N)

    For i = 1 To N
    ary(i) = .Cells(i, 1)


Dim Path As String
Dim filename As String
    Path = "C:\"
filename = Workbooks("file.xlsm").Sheets("list").Cells(i, 1)


Windows("file.xlsm").Activate

Sheets("ingredients").Range("$A$1:$E$1451").AutoFilter Field:=1
Sheets("ingredients").Range("$A$1:$E$1451").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
Range("A1:E1451").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False`

1 个答案:

答案 0 :(得分:0)

您似乎正在使用aray来存储一个值,这是不正确的。你也开始用''你似乎不会在这段代码中结束(我的猜测为什么它会保留你的数组中的值,导致你在使用下一个值之前不要结束)。相反,我建议在你的第一个列表中使用一个循环'从第一行到最后一行的标签,并使用该值过滤您的第二个标签'成分'。它看起来像这样:

Sub LoopAndFilter ()

Dim X as long, LR as long    
LR = Sheets("list").Range("A" & Rows.Count).End(xlUp).Row
For X = 1 to LR
    'Your code to use Sheets("list").Range("A" & X).value in a filter on your other tab
Next X

End sub