我的excel VBA代码有些问题,它不起作用,是的,我不知道为什么......
我想在集合中添加一次记录编号。我的代码如下所示:
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 :(得分:2)
如果你给它一个键,就没有必要测试Collection以查看该项是否存在。 您可以编写类似的代码:
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
添加具有相同键的项目将导致操作被拒绝。如果您担心其他错误而不是重复键错误,您可以随时根据结果检查内联代码和分支中的错误编号。
答案 1 :(得分: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)