我有3个列表框。在属性中,我将ListStyle选为fmListStyleOption,将MultiSelect选为fmMultiSelectMulti。这是当前的代码:
Private Sub Userform_Initialize()
Me.lstProperties.RowSource = "FilterData"
Me.lstStmts.RowSource = "ListofProps"
Me.lstLoans.RowSource = "FilterLoans"
End Sub
我正在使用动态命名范围,希望它只在列表框中显示实际具有值的单元格中的数据。不幸的是,它显示了一长串带有复选框的空白行。
有没有人知道如何确保列表框只显示带有值的数据,即如果我的命名区域中有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).