VBA - 从列表框中删除空项
VBA - Remove empty items from ListBox
我想从使用数组创建的列表框中删除空项。但是在某些时候,每次更新 ListCount 值时,代码都会失败。我该如何克服这个问题?
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
With lst
For i = 0 To .ListCount - 1
If .List(i) = False Then
.RemoveItem i
End If
Next
End With
结束子
经过一番调试,我找到了解决办法。我希望这对其他人有帮助。每次我删除一个项目时,随着 ListCount 值的更新,我让它回到开头。不利于性能,但它正在工作。
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
With lst
iterate:
For i = 0 To .ListCount - 1
If .List(i) = False Then
.RemoveItem i
GoTo iterate
End If
Next
End With
End Sub
请尝试下一个代码:
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
Dim i As Long
With lst
For i = .ListCount - 1 To 0 Step -1
If .List(i) = Empty Then
.RemoveItem i
End If
Next
End With
End Sub
迭代必须向后进行。否则,删除项目后,它们的引用将丢失...
这就是为什么您的解决方案即使效率不高也能奏效的原因。删除每个项目后,迭代将重新开始,并使用所有现有项目的新引用。
我想从使用数组创建的列表框中删除空项。但是在某些时候,每次更新 ListCount 值时,代码都会失败。我该如何克服这个问题?
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
With lst
For i = 0 To .ListCount - 1
If .List(i) = False Then
.RemoveItem i
End If
Next
End With
结束子
经过一番调试,我找到了解决办法。我希望这对其他人有帮助。每次我删除一个项目时,随着 ListCount 值的更新,我让它回到开头。不利于性能,但它正在工作。
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
With lst
iterate:
For i = 0 To .ListCount - 1
If .List(i) = False Then
.RemoveItem i
GoTo iterate
End If
Next
End With
End Sub
请尝试下一个代码:
Private Sub RemoveEmptyRows(lst As msforms.ListBox)
Dim i As Long
With lst
For i = .ListCount - 1 To 0 Step -1
If .List(i) = Empty Then
.RemoveItem i
End If
Next
End With
End Sub
迭代必须向后进行。否则,删除项目后,它们的引用将丢失...
这就是为什么您的解决方案即使效率不高也能奏效的原因。删除每个项目后,迭代将重新开始,并使用所有现有项目的新引用。