VBA循环删除ListBox选中项报错:Could not get the selected property
问题原因
- 核心触发原因:你在正向遍历
ListBox2的过程中调用RemoveItem方法删除条目,会直接减少ListBox2的总项数ListCount,且被删除条目之后的所有条目索引都会自动减1。举个例子:假设列表初始有5项,索引范围是04,当i=1时删除了对应条目,剩余4项的索引会变为03;当循环继续执行到i=4时,i已经超过了当前列表的最大有效索引3,此时访问ListBox2.Selected(i)就会触发无效参数报错。 - 第二段逻辑相似的代码可正常运行的原因:遍历过程中仅读取
ListBox1的选中状态和内容,没有修改ListBox1的条目数量,所有遍历的i值全程都对应有效索引,因此不会触发报错。
解决方案
把正向遍历改为倒序遍历即可,从列表最后一项开始往第一项遍历,删除条目不会影响还未遍历到的前序条目的索引,修改后代码如下:
Private Sub CommandButton2_Click() Dim i% 'ListBox2.Clear ' 倒序遍历,从最后一项索引开始到0结束 For i = ListBox2.ListCount - 1 To 0 Step -1 If ListBox2.Selected(i) = True Then ListBox2.RemoveItem (i) End If Next i End Sub
内容的提问来源于stack exchange,提问作者Suril Mehta
相关产品推荐
相关产品推荐

