VBA学习笔记57:列表框与组合框
学习资源:《Excel VBA从入门到进阶》第57集 by兰色幻想
本节讲述列表框和组合框。
如下图所示,列表框,顾名思义,用于提供一组条目(数据项),用户可以用鼠标选择其中一个或者多个条目,但是不能直接编辑列表框的数据。而组合框是文字框+下拉菜单的组合形式,用户可以从下拉菜单选择条目。
一、组合框的显示
- 显示多列内容
rowsource属性:可以从工作表中导入数据 。
Columnheads属性:显示列标题,只在引用工作表数据源时才有效,而且数据源不能包括标题行。
ColumnCount属性:设置组合框可显示的列数。
TextColumn属性:选取多列时显示第N列的内容。
BoundColumn属性:指定返回第N列的值,作为窗体的数值。
Private Sub CommandButton1_Click()
'点击初始化数据
商品.RowSource = "sheet3!A2:C5" '导入工作表数据(不用包含列标题)
商品.ColumnCount = 3
商品.ColumnHeads = True '显示列标题
商品.TextColumn = 1 '组合框中显示第1列,即商品的名称
商品.BoundColumn = 2 '选取后第2列为作为控件的默认值,即商品的数量
End Sub
Private Sub 商品_Change()
'商品窗体数值变化
If 商品.ListIndex <> -1 Then '组合框没选取时listindex会返回-1
TextBox1 = 商品.Value
'TextBox1要显示商品数量,上面已经用BoundColumn把商品控件的默认值设定第2列的值
TextBox2 = 商品.List(商品.ListIndex, 2)
'TextBox2要显示商品单价,List即数据源的数值,以第一列作为索引0,显示索引后第二个的值
End If
End Sub
2. 获得焦点自动打开下拉列表
Private Sub 商品_Enter()
商品.DropDown
End Sub
设置了这一段,点控件空白处就会显示下拉列表,没设置就只能点旁边的按钮。
3. 下拉列表显示最大行数
ListRows属性设置,不含标题行。
4. 组合框下拉按钮的图标
ShowDropButtonWhen 属性:可以设置是否显示下拉按钮图标。如果写了获得焦点自动打开下拉列表的代码,似乎不设置也行,但有图标会比较清晰。
DropButtonStyle 属性:设置下拉按钮的类型。
5. 设置列宽
ColumnWidths属性:设置下拉列表的列宽,可以用三种单位:厘米、磅、英寸。
用分号隔开,数值和单位之间要留一个空格。
商品.ColumnWidths = "70 磅;60 磅;67 磅" '以磅为单位
商品.ColumnWidths = "2 厘米;2 厘米;5 厘米" '以厘米为单位
商品.ColumnWidths = "2 英寸;2 英寸;3 英寸" '以英寸为单位
二、 组合框的功能
1. 向组合框内添加内容
有以下四种方法:
① 使用additem方法添加
Private Sub UserForm_Initialize()
商品.AddItem "A"
商品.AddItem "B"
商品.AddItem "C"
End Sub
② 使用常量数组添加
Private Sub UserForm_Initialize()
商品.List = Array("A", "B", "C")
End Sub
③ 使用VBA数组添加
Private Sub UserForm_Initialize()
Dim arr(1 To 3), x
For x = 1 To 3
arr(x) = Cells(x + 1, "A") '导入单元格A2,A3,A4的值,也就是ABC,见上面工作表截图。
Next x
商品.List = arr
End Sub
④ 创建和单元格链接
Private Sub UserForm_Initialize()
商品.RowSource = "sheet3!A2:A4"
End Sub
2. 删除指定行RemoveItem
Private Sub CommandButton3_Click()
'删除指定行
商品.RemoveItem 1
'删除选中的行ListIndex属返回选定的行数,不能删除rowsourse设置的填充数据
商品.RemoveItem 商品.ListIndex
End Sub
3. 提取选取的多列内容
List(行数,列数)
行和列都是从0开始算起的。
4. 是否可以输入列表内容以外的内容
MatchRequired 属性值为true时,必须输入组合框中含有的。如果为false,可以输入下拉列表中没有的数值。
三、列表框的属性和方法
大部分属性和组合框相同,所以就不赘述了,只说列表框独有的。
1. ListStyle值为0时,样式为默认样式,无单选或多选框,如果为1时则有,0则无。
2. Selected(行数) 可以判断列表框中某行是否被选取,可获取多个行数,是一个集合。
Private Sub CommandButton1_Click() '显示选取的行
Dim x As Integer
For x = 0 To LB1.ListCount - 1
'Selected是选取的集合