VBA - 从列表框中删除空项目

Posted

技术标签:

【中文标题】VBA - 从列表框中删除空项目【英文标题】:VBA - Remove empty items from ListBox 【发布时间】:2020-08-09 13:10:12 【问题描述】:

我想从我用数组创建的 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

结束子

【问题讨论】:

【参考方案1】:

请尝试下一个代码:

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

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

这就是为什么您的解决方案(即使不是很有效)也能奏效的原因。每次删除项目后,都会使用所有现有项目的新引用重新开始迭代。

【讨论】:

【参考方案2】:

经过一些调试,我找到了解决方案。我希望这对其他人有帮助。每次我删除一个项目时,随着 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

【讨论】:

以上是关于VBA - 从列表框中删除空项目的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA:比较两个列表框

vba,如何从列表框中的工作表中删除过滤后的数据

从 pandas 数据框中删除具有空列表的行

VBA从Excel中的电子表格中的列表框中获取值

如果文本框中没有文本,jQuery 自动完成返回空列表

ACCESS VBA 从列表框中选择多个值并执行查询名称