嘿伙计们我想从"变量中选择一些变量"列表框到"行"和/或"列"列表框。
我知道我应该这样写:
For irow = lbxVar.ListCount To 1 Step -1
If lbxVar.Selected(irow - 1) = True Then
lbxColumn.AddItem lbxVar.List(irow - 1)
lbxVar.RemoveItem (irow - 1)
End If
Next irow
我只是不明白为什么我不能写这样的代码?
If lbxVar.ListIndex > -1 Then
For irow = 0 To lbxVar.ListCount - 1
If lbxVar.Selected(irow) = True Then
lbxColumn.AddItem lbxVar.List(irow)
lbxVar.RemoveItem (irow)
End If
Next irow
End If
显示错误:
谢谢你。
答案 0 :(得分:3)
您必须向后循环集合的原因是,当您从列表中删除项目时,lbxVar.ListCount
会变小。
但是,在For循环中,迭代次数在开始执行后是固定的 - 表达式lbxVar.ListCount - 1
仅被计算一次。如果删除了任何项目,则会超出lbxVar.Selected
。
当你向后循环时,你没有这个问题,因为它只会改变你已经迭代过的项目的索引。如果它们被添加到第二个Listbox的顺序是你试图通过向前而不是向后遍历索引而保留的顺序,那么你必须循环选择的项目两次 - 一次复制到另一个Listbox,一次删除它们:
If lbxVar.ListIndex > -1 Then
'Add pass:
For irow = 0 To lbxVar.ListCount - 1
If lbxVar.Selected(irow) Then
lbxColumn.AddItem lbxVar.List(irow)
End If
Next irow
'Remove pass:
For irow = lbxVar.ListCount To 1 Step -1
If lbxVar.Selected(irow - 1) Then
lbxVar.RemoveItem (irow - 1)
End If
Next irow
End If