我有一个针对很多项目运行的程序,跳过某些不符合标准的项目。然而,我然后回去为第一遍中错过的一些人运行它。我目前通过手动为每个人重新运行程序来做到这一点,但理想情况下会更像一个解决方案。
我的老板建议可能有效的东西是创建一个列表(如数据 - >列表),其中包含相关项目的名称,然后迭代列表。可悲的是,我的帮助文件似乎让我失望了 - 我不知道我是不知道该找什么,或者是什么。
运行“生成宏”命令显示首先创建列表的VBA沿着行 ActiveSheet.ListObjects.Add(xlSrcRange,Range(“$ A $ 1”),, xlYes).Name =“List1”
不幸的是,我似乎无法弄清楚如何用结果列表做事。我正在寻找
的循环For Each ListItem in List
Run the procedure on the text in ListItem.Value
Next ListItem
有什么建议吗?
答案 0 :(得分:2)
也许就是这些问题:
Dim Counter 'module level '
Sub RunSomeProc()
Counter = 0
'1st test '
SomeProc
'2nd Test skipped items'
For Each c In Range("c1:c" & Counter)
SomeProc
Next
End Sub
Sub SomeProc()
For Each c In Range("NamedRange1")
If SomeTest=SomeVal Then
'Write to 2nd test range '
Range("C1").Offset(Counter, 0) = c 'Value of cell'
Counter = Counter + 1
End If
Next
End Sub
答案 1 :(得分:0)
你可以用这种方式迭代它:
set rgList = Range("name_of_range") For i = 1 To rgList.Rows.Count ' Do something using rgList.Cells(i, 1) RunProcedure(rgList.Cells(i, 1)) Next i
我在这里假设范围在列上;它是连续的,你应该在第二个索引上完成迭代 当然,可能有更好的方法来迭代范围;我在一个小脚本上使用这个,并且工作得非常好。
答案 2 :(得分:0)
我最终的解决方案是将列表导入为外部数据查询,然后我很好地命名并作为范围引用。所以:
For each item in Sheets("Sheet1").Range("Range1")
Do stuff
Next item