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

迭代必须向后进行。否则,删除项目后,它们的引用将丢失...

这就是为什么您的解决方案即使效率不高也能奏效的原因。删除每个项目后,迭代将重新开始,并使用所有现有项目的新引用。