我有一个动态多列列表框,范围从 1 到 100 行,并且用户窗体具有固定高度,因此需要时会显示垂直滚动条。
我的问题是,即使列出了所有 100 行,滚动条也会理解其中有 500-600 行,导致底部有一个非常大的空白区域。
有谁知道如何设置滚动条自动适合列出的行数?
我找了好几个地方都没有找到答案。
这是填充列表框的代码:
Sub RefreshLBIndoor()
Dim i As Integer, j As Integer, k As Byte
With ListBoxIndoor ' This is the listbox name
.ColumnCount = 6
j = 1
For i = 3 To SupportList.ListObjects("ProductList_table").DataBodyRange.Rows.Count + 2 ' Data begins from row 3
' Column F (number 6) contains the filter for which rows to populate the listbox
If InStr(1, SupportList.Cells(i, 6), "Example", vbTextCompare) = 1 Then
For k = 3 To 8
.AddItem
.Column(k - 3, j - 1) = SupportList.Cells(i, k).Value
Next k
j = j + 1
End If
Next i
On Error Resume Next
.ListIndex = 0
End With
End Sub
问题是为每行的每列添加一个项目。 将 .AddItem 移动到列循环之外修复了问题。 我还添加了 .Clear 以在刷新时清除列表框。
我不知道列表框将空行推到末尾。 很奇怪。
Sub RefreshLBIndoor()
Dim i As Integer, j As Integer, k As Byte
With ListBoxIndoor ' This is the listbox name
Rem Clear the listbox when you refresh it
.Clear
.ColumnCount = 6
j = 1
For i = 3 To SupportList.ListObjects("ProductList_table").DataBodyRange.Rows.Count + 2 ' Data begins from row 3
' Column F (number 6) contains the filter for which rows to populate the listbox
If InStr(1, SupportList.Cells(i, 6), "Example", vbTextCompare) = 1 Then
Rem AddItem once per row
.AddItem
For k = 3 To 8
.Column(k - 3, j - 1) = SupportList.Cells(i, k).Value
Next k
j = j + 1
End If
Next i
On Error Resume Next
.ListIndex = 0
End With
End Sub