当ListBox列表框设置为多列显示时,三种批量写入数据的方法:
一、数组写入法,可以把表格某一区域直接赋值给数据,然后写入列框,或先把数组内容一个一个写好,然后批量写入列表框。
二、RowSource引用数据源方法,批量指定引用显示的数据
使用RowSource引用数据源方法时,如果列表开启表头显示,则会自动使用引用区域所在列第一行作为表头,如果选择的区域包含第一行,则选择列号作为表头。
三、转置写入法,转置的方法对RowSource引用数据源方法无效,“转置”的意思就是把列转为行,把行转为列显示。如果需要把数据源进行转置,可以把数据源先赋值给数组变量,再使用转置的方法。
ListBox两种批量写入数据方法演示
还没写入数据的空列表
使用数据方式写入列表
用转置的方法将数据写入列表下图引用原区域为"A1:E6",第一行已经包含在数据源里被引用,则会自动把列号当作表头。
数据源包含第一行自动取列号作表头下图引用原区域为"A2:E6",则第一行内容会被当作表头。
数据源不包含第一行自动取第一行做表头下面附上代码,如有需要可以自行测试。
需要先新建一个窗体,里面分别加入一个名为ListBox1的列表框,四个名称分别为CommandButton1,CommandButton2,CommandButton3,CommandButton4的按钮,直接添加控件时默认就是。然后在EXCEL表格上"A1:E6"的位置写入内容。
再把下面的代码复制到新建的窗体的代码里就可以了。
Dim RNG, s, rsu
Private Sub CommandButton1_Click()
ListBox1.ColumnHeads = False
'不显示表头
ListBox1.RowSource = ""
'默认为空,本例中因为其它控件已经设置了,所以要先设置为空,不然下面的listBox1.list()冲突
ListBox1.TextAlign = fmTextAlignCenter '设置居中显示
ListBox1.ColumnWidths = "48磅;48磅;48磅;48磅;48磅" '设置列宽,设置多列用分号;隔开
ListBox1.ColumnCount = 5 '设置列表为5列
RNG = ActiveSheet.Range("A1:E6") '把当前活动工作表的"A1:E6"内容赋值给数据RNG
ListBox1.List() = RNG '把数据的内容写入列表。注意数组大小和列表的大小一致。
s = 1
End Sub
Private Sub CommandButton2_Click()
ListBox1.RowSource = ""
'默认为空,本例中因为其它控件已经设置了,所以要先设置为空,不然下面的listBox1.list()冲突
ListBox1.TextAlign = fmTextAlignCenter
ListBox1.ColumnWidths = "39磅;39磅;39磅;39磅;39磅;39磅" '设置列宽
ListBox1.ColumnCount = 6 '6列
If s = 1 Then
ListBox1.ColumnHeads = False
ListBox1.Column() = RNG 'ListBox1.Column() 是以转置的方法写入
Else
'RowSource数据源方法并不能直接转置写入列表框,可以使用变通方法,先把数据源赋值给数组,再使用数据写入列表框,只有RowSource方法才能显示表头
ListBox1.ColumnHeads = True
ListBox1.Column() = rsu
End If
End Sub
Private Sub CommandButton3_Click()
ListBox1.ColumnHeads = True '设置显示表头
ListBox1.TextAlign = fmTextAlignCenter
ListBox1.ColumnWidths = "48磅;48磅;48磅;48磅;48磅" '设置列宽
ListBox1.ColumnCount = 5
ListBox1.RowSource = "a2:e6"
rsu = ListBox1.List()
'当RowSource数据不包括第一行时,取第一行作表头
s = 2
End Sub
Private Sub CommandButton4_Click()
Dim sou
ListBox1.ColumnHeads = True '设置显示表头
ListBox1.TextAlign = fmTextAlignCenter
ListBox1.ColumnWidths = "48磅;48磅;48磅;48磅;48磅"
ListBox1.ColumnCount = 5
ListBox1.RowSource = "a1:e6"
rsu = ListBox1.List()
'当RowSource数据包括第一行时,取列号作表头
s = 3
End Sub