Excel表格实现下拉复选框多选
1功能实现必备条件
- Windows 10 环境
- Microsoft Office Excel 2021
- Microsoft Office Excel 2021已提前安装VBA支持库
2准备数据源
打开要实现的excel表格,将选项数据放到sheet2
3开启“开发工具”
开启 “开发工具” 步骤:文件->选项->自定义功能区->开发工具->“确定”保存
完成以上准备工作
4具体实现
4.1插入列表框控件
选中单元格 --> 开发工具 --> 插入 --> ActiveX控件 --> 列表框(ActiveX控件)
注意: 点击列表框(ActiveX控件)后需要点击一下单元格后才会显示出一个ActiveX控件。
4.2设置列表框控件属性
选中列表框控件 --> 开发工具 --> 设计模式 --> 属性
- ListFillRange: Sheet2!A1:A10
- 设置数据范围:数据源在Sheet2里面的A1-A10。(需要手动输入数据范围Sheet2!A1:A10)
- ListStyle: 1 - fmListStyleOption
- 设置样式
- MultiSelect: 1 - fmMultiSelectMulti
- 设置多选
4.3编辑VBA代码实现功能
开发工具 --> 设计模式 --> 查看代码
注意:Excel需要提前安装VBA支持库;
VBA代码内容:
注意:
图内“13”是第13列的内容实现下拉复选框功能,这个要根据场景需要进行调整。
图内“1”含义是取消首行实现下拉复选框功能。通常首行是标题,这个要根据场景需要进行调整。
Private Sub ListBox1_Change()
If Reload Then Exit Sub '加载ListBox1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then t = t & "," & ListBox1.List(i)
Next
ActiveCell = Mid(t, 2)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ListBox1
'第 2 列 且 单元格大于 1,因为表头的字段不需要进行多选
If ActiveCell.Column = 13 And ActiveCell.Row > 1 Then
t = ActiveCell.Value
Reload = True '如果是根据单元格的值修改列表框,则暂时屏蔽listbox的change事件。
For i = 0 To .ListCount - 1 '根据活动单元格内容修改列表框中被选中的内容
If InStr(t, .List(i)) Then
.Selected(i) = True
Else
.Selected(i) = False
End If
Next
Reload = False
.Top = ActiveCell.Top + ActiveCell.Height '以下语句根据活动单元格位置显示列表框
.Left = ActiveCell.Left
.Width = ActiveCell.Width
.Visible = True
Else
.Visible = False
End If
End With
End Sub
4.4调试运行
调试 --> 编译 VBAProject --> 点击运行VB代码 --> 回到下拉复选框区域进行功能验证
运行效果:
4.5保存文件
需要将已经实现下拉复选框功能的.xlsx文件另存为.xlsm文件,这样才能在后续使用时保证下拉复选框功能正常使用。
正常保存后的.xlsm文件在使用时需要使用Microsoft Office Excel打开并要开启宏功能,才能够正常使用下拉复选框功能。
保存文件时选择“保存类型”为:
(多个下拉复选框实现效果要在VBA里面做调整)