2008-12-07 105 views
0

我有一个运行很多项目的程序,跳过某些不符合标准的项目。然而,我然后回去运行一些在第一轮中错过的个人。我目前通过为每个人手动重新运行程序来做到这一点,但理想情况下,更喜欢解决方案。在Excel 2003中创建可变大小的组合的好方法是什么?

我的老板建议的东西可能会有效的是创建一个列表(如在数据 - >列表),其中包含有问题的项目的名称,然后迭代列表。可悲的是,我的帮助文件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 

有什么建议吗?

回答

0

我最终的解决办法是导入列表作为外部数据的查询,我则很好地命名,并作为一个参考范围。所以:

For each item in Sheets("Sheet1").Range("Range1") 
    Do stuff 
Next item 
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 

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

+0

这样做的问题是它明确定义了哪些单元格被包含 - 我在寻找的是一种根据项目数量来扩大和缩小区域的方法。 (无需每次都破解代码) – Margaret 2008-12-07 23:42:24

+0

我了解您的请求。 我现在已经制作了一个更通用的版本,基于命名的范围 - 实际上,我想我将在我的小脚本中使用它:-) – 2008-12-08 08:22:20

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 
相关问题