一种可以灵活显示的列表。VBA列表设计的时候,我们有时候需要显示足够多的数据,但如果我们一次性定义过多列,例如UserForm2.ListBox1.ColumnCount = 100,这样定义有两个弊端,一是经常要拖动滚动条,二是大部分时间不需要看这么多数据。这样我们就需要设计一种可以灵活显示的列表,能够增加和减少显示列数。这里是通过一个文本框和两个按钮,一个增加显示列、一个减少显示列按钮,文本框用于显示列数。下面的程序是设计了一个多页,用于在一个窗口显示两个列表,所以就加入了If UserForm2.MultiPage1.Value = 0 Then语句用于判断我们当前列表是哪一页,具体实例如下:
Private Sub CommandButton9_Click()
Dim ylist() As String
Dim i, ii, iii, iiii, lstrw, lstcl, hzlstcl As Integer
lstrw = 600
zjlstcl = UserForm2.TextBox2.Text
zjlstcl = zjlstcl + 1
UserForm2.TextBox2.Text = zjlstcl
ReDim ylist(1 To lstrw, 1 To zjlstcl)
If UserForm2.MultiPage1.Value = 0 Then
hzlstcl = Sheets("表一").Range("a1").End(xlToRight).Column
For i = 1 To lstrw
ylist(i, 1) = Sheets("表一").Range("a" & i)
Next
For i = 1 To lstrw
iii = 1
For ii = hzlstcl - zjlstcl + 2 To hzlstcl
iii = iii + 1
If i = 1 Then
ylist(i, iii) = Right(Sheets("表一").Cells(i, ii), 5)
Else
ylist(i, iii) = Sheets("表一").Cells(i, ii)
End If
Next
Next
UserForm2.ListBox1.RowSource = ("")
UserForm2.ListBox1.ColumnCount = zjlstcl
UserForm2.ListBox1.List = ylist
UserForm2.RedoAction
End If
If UserForm2.MultiPage1.Value = 1 Then
hzlstcl = Sheets("周表一").Range("a1").End(xlToRight).Column
For i = 1 To lstrw
ylist(i, 1) = Sheets("周表一").Range("a" & i)
Next
For i = 1 To lstrw
iii = 1
For ii = hzlstcl - zjlstcl + 2 To hzlstcl
iii = iii + 1
If i = 1 Then
ylist(i, iii) = Right(Sheets("周表一").Cells(i, ii), 4)
Else
ylist(i, iii) = Sheets("周表一").Cells(i, ii)
End If
Next
Next
UserForm2.ListBox2.RowSource = ("")
UserForm2.ListBox2.ColumnCount = zjlstcl
UserForm2.ListBox2.List = ylist
UserForm2.RedoAction
End If
Endsub
以上的关键列表数据更新还用到了UserForm2.ListBox2.List属性,通过数组在传递列表之间以及其他数据转换中很方便,实现了在电机按钮【增加列】的时候更新现实列表的数据。其次还要注意的是【zjlstcl 】需要设置为公共变量,因为需要在zjlstcl 需要在增加、减少和显示列表三个过程中传递数据。最后就是UserForm2.RedoAction很重要,通过它我们才能实现列表显示的更新。