vba combobox添加下拉内容_VBA学习笔记57:列表框与组合框

556e9750baec64785753689815947689.png

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


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

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

eb36748aed44430b1185ec80283949eb.png

一、组合框的显示

  1. 显示多列内容

rowsource属性:可以从工作表中导入数据 。

Columnheads属性:显示列标题,只在引用工作表数据源时才有效,而且数据源不能包括标题行。

ColumnCount属性:设置组合框可显示的列数。

TextColumn属性:选取多列时显示第N列的内容。

BoundColumn属性:指定返回第N列的值,作为窗体的数值。

e7045bbe309d770481f5650737fc19f0.png
工作表数据
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

bb7ba5e4ec070dbce8967a6426e97e6b.gif

2. 获得焦点自动打开下拉列表

Private Sub 商品_Enter()
  商品.DropDown
End Sub

设置了这一段,点控件空白处就会显示下拉列表,没设置就只能点旁边的按钮。

15fd83aaf15e9632de75909f40dc19d8.png

3. 下拉列表显示最大行数

ListRows属性设置,不含标题行。

a6df40a2e2d45b87cf1824c35134a816.png

4. 组合框下拉按钮的图标

ShowDropButtonWhen 属性:可以设置是否显示下拉按钮图标。如果写了获得焦点自动打开下拉列表的代码,似乎不设置也行,但有图标会比较清晰。

DropButtonStyle 属性:设置下拉按钮的类型。

78c503f79b38feaf12f2ba81b005bd3c.png

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

e64e3714b669ca8562400e5113b70faa.png

② 使用常量数组添加

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则无。

36d787332b0d610b347ddea8985a5041.png
默认样式

903497d5a9ad4d853f86c99cf07e8a7a.png
多选框

2. Selected(行数) 可以判断列表框中某行是否被选取,可获取多个行数,是一个集合。

Private Sub CommandButton1_Click() '显示选取的行
Dim x As Integer
For x = 0 To LB1.ListCount - 1
   'Selected是选取的集合
   If LB1.Selected(x) = True Then 
      'list(行,列)来表示在列表框中的位置 ,行与列都是从0开始
      MsgBox x & "  "&LB1.List(x, 0) 
   End If
 Next x
End Sub

a0da122e8123b8f1f7d384b251fc5838.png
选取第一行“界面”,但它的行列从0开始,所以显示的是0。

3. ListCount 属性:列表框的条目个数。(在上例也有使用到)

4. MultiSelect 属性值为0 只能选一个,1可以用鼠标点击多选或取消,2 需要按Shift或Ctrl才能多选。

2d7a9145e33f92c6b6dd86b5e51c00ad.png

没想到这个专栏停更了这么久还有陆续的点赞和关注,不好意思再拖更了……还有23篇,今年内一定要把它给完结了(再次立flag,也欢迎大家催更)。

  • 21
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值