2014-09-10 27 views
0

我有一些問題,我的Excel VBA代碼的計數,這是行不通的,是的,我不知道爲什麼......Excel的VBA - 表不同的參數

Data table

我想在集合中添加每個記錄編號一次。我的代碼如下所示:

For i = 1 To lo.ListRows.Count 
    Count = 1 
    Do While recordList.Count >= Count 
     recordFound = False 
     If lo.ListColumns("Record").DataBodyRange.Rows(i) = recordList(Count) Then 
      recordFound = True 
     End If 
     If recordFound = False Then 
      recordList.Add (lo.ListColumns("Record").DataBodyRange.Rows(i)) 
     End If 
     Count = Count + 1 
    Loop 
Next 

現在做什麼,它返回空集...

是對子級偉大的,如果你能幫助我的傢伙!

+0

假設你從一個空的集合開始,這個部分永遠不會是真的:'do while recordList.Count> = Count',因爲0 <1. – Rory 2014-09-10 12:25:17

+0

Yeap,的確如此。我還發現我的結構有誤。 '如果''recordFound'的語句必須位於'for'循環中... – 2014-09-10 12:34:21

回答

2

有沒有真正需要測試的集合,看看該項存在,如果你給它一個鍵返回每個項目的計數。 您可以編寫類似:

On Error Resume Next 
For I = 1 To lo.ListRows.Count 
    With lo.ListColumns("Record").DataBodyRange.Rows(I) 
     RecordList.Add Item:=.Value, Key:=CStr(.Value) 
    End With 
Next I 
On Error GoTo 0 

添加項目使用相同的密鑰將導致操作被拒絕。如果您擔心重複鍵錯誤以外的其他錯誤,則可以隨時根據結果檢查內聯代碼和分支中的錯誤編號。

0

我一直無法與參考LO來測試這一點,但它與一個參考工程

Dim objDictionary As Object 
Dim dictionaryKey As Variant 
Dim i As Long 
Set objDictionary = CreateObject("Scripting.Dictionary") 

For i = 1 To lo.ListRows 
    objDictionary.Item(CStr(lo.ListColumns("Record").DataBodyRange.Rows(i))) = objDictionary.Item(CStr(lo.ListColumns("Record").DataBodyRange.Rows(i))) + 1 
Next i 

For Each dictionaryKey In objDictionary.keys 
    ' Do something 
Next dictionaryKey 

我用正常的集合對象的字典對象,而不是因爲它應該做一個範圍你正在嘗試做什麼。由於該項目是每次遞增,您還可以通過使用

objDictionary.item(dictionaryKey)