如何从集合中删除当前循环的项目?我得到运行时错误13:在行wls上移动不匹配。移除vl
Sub FocusOnH(ByRef vls As Collection)
Dim vl As CVegetableLine
For Each vl In vls
If vl.hValue <> 0 Then
vl.volume = vl.hValue
Else
vls.Remove vl
End If
Next vl
End Sub
答案 0 :(得分:5)
您必须在按顺序循环播放集合时删除项目,否则会导致错误。
Sub TestRemoveItemInCollection()
Dim col As Collection, i As Integer
Set col = New Collection
col.Add "item1"
col.Add "item2"
col.Add "item3"
col.Add "item4"
' Never use: For i=1 to col.Count
For i = col.Count To 1 Step -1
col.Remove i
Next i
Set col = Nothing
End Sub
为什么呢?因为Visual Basic集合会自动重新编制索引。如果您尝试以正向顺序删除,它将与外部循环冲突,从而得到棘手的错误。
另一个例子,删除集合中的所有项目可以这样做:
For i = 1 to col.Count
col.Remove 1 'Always remove the first item.
Next i
答案 1 :(得分:4)
Collection.Remove()
方法需要key
(如果提供.Add()
方法)或index
(默认情况下)作为参数,那么您无法提供用户定义的对象作为Remove()
方法的参数,该方法解释了类型不匹配错误。
在MSDN
上查看更多内容如果您正在使用用户定义的类型,那么您应该使用Dictionary
集合。
要实现您想要的效果,请使用迭代器
dim i as long
for i = Collection.Count to 1 step -1
'Collection.Remove i
next i