2008-12-07 31 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 
相關問題