添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
VBA学习笔记57:列表框与组合框

VBA学习笔记57:列表框与组合框

2 年前 · 来自专栏 VBA学习笔记(完结)

学习资源:《Excel VBA从入门到进阶》第57集 by兰色幻想


本节讲述列表框和组合框。

如下图所示,列表框,顾名思义,用于提供一组条目(数据项),用户可以用鼠标选择其中一个或者多个条目,但是不能直接编辑列表框的数据。而组合框是文字框+下拉菜单的组合形式,用户可以从下拉菜单选择条目。

一、组合框的显示

  1. 显示多列内容

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是选取的集合