以下代码大部分工作正常。它在"列表中搜索我的范围"选项卡,挑出第一个单元格(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`
答案 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