0

我有一个针对很多项目运行的程序,跳过某些不符合标准的项目。但是,然后我回去为一些在第一遍中错过的人运行它。我目前通过手动为每个人重新运行该过程来做到这一点,但理想情况下,我希望有一个更轻松的解决方案。

我的老板建议可能有效的方法是创建一个包含相关项目名称的列表(如在数据 -> 列表中),然后遍历该列表。可悲的是,我的帮助文件 fu 似乎让我失望了——我不知道我是否只是不知道要寻找什么,或者是什么。

运行“生成宏”命令显示首先创建列表的 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

有什么建议么?

4

3 回答 3

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
于 2008-12-07T23:55:34.910 回答
0

您可以通过以下方式对其进行迭代:

设置 rgList = Range("name_of_range")    
对于 i = 1 到 rgList.Rows.Count
  ' 使用 rgList.Cells(i, 1) 做一些事情
  RunProcedure(rgList.Cells(i, 1))
接下来我

我在这里假设范围在列上;如果它是连续的,你应该在第二个索引上完成迭代。
当然,可能有更好的方法来迭代一个范围;我在一个小脚本上使用这个,并且工作得很好。

于 2008-12-07T23:35:27.837 回答
0

我最终的解决方案是将列表作为外部数据查询导入,然后我很好地命名并作为范围引用。所以:

For each item in Sheets("Sheet1").Range("Range1")
    Do stuff
Next item
于 2009-07-03T00:08:12.917 回答