清空ListBox值

时间:2016-07-20 21:24:51

标签: excel excel-vba listbox vba

我有3个列表框。在属性中,我将ListStyle选为fmListStyleOption,将MultiSelect选为fmMultiSelectMulti。这是当前的代码:

Private Sub Userform_Initialize()

Me.lstProperties.RowSource = "FilterData"

Me.lstStmts.RowSource = "ListofProps"

Me.lstLoans.RowSource = "FilterLoans"

End Sub

我正在使用动态命名范围,希望它只在列表框中显示实际具有值的单元格中的数据。不幸的是,它显示了一长串带有复选框的空白行。

有没有人知道如何确保列表框只显示带有值的数据,即如果我的命名区域中有2个单元格,那么我的列表框中只有两个复选框。

Visual

2 个答案:

答案 0 :(得分:0)

更容易实现此目的的原因是从您的范围创建一个数组并将该数组分配给Listbox.List属性。这样您就可以使用SpecialCells来过滤数据。

Private Sub Userform_Initialize()

    Me.lstProperties.List = getArrayFromRange(Range("FilterData").SpecialCells(xlCellTypeVisible))

    Me.lstStmts.List = getArrayFromRange(Range("ListofProps").SpecialCells(xlCellTypeConstants))

    Me.lstLoans.RowSource = getArrayFromRange(Range("FilterLoans").SpecialCells(xlCellTypeConstants))

End Sub

Function getArrayFromRange(rng As Range)
    Dim arr
    Dim a As Range
    Dim count As Long, x As Long, y As Integer

    ReDim arr(1 To rng.CountLarge, 1 To rng.Columns.count)

    For Each a In rng.Areas

        For x = 1 To a.Rows.count

            count = count + 1

            For y = 1 To rng.Columns.count
                arr(count, y) = a.Cells(x, y).Value
            Next

        Next
    Next

    getArrayFromRange = arr
End Function

答案 1 :(得分:0)

问题是我的动态命名范围没有正确设置。命名范围的公式应为:

=OFFSET('Property Data'!$A$5,2,,COUNTA('Property Data'!$A$5),14)

而不是:

=OFFSET('Property Data'!$A$5,2,,COUNTA('Property Data'!$A$5:N$5),14).