Microsoft Office Excel 2021表格实现下拉复选框多选
文章目录
- 1功能实现必备条件
- 2准备数据源
- 3开启“开发工具”
- 4具体实现
- 4.1插入列表框控件
- 4.2设置列表框控件属性
- 4.3编辑VBA代码实现功能
- 4.4调试运行
- 4.5保存文件
1功能实现必备条件
- Windows 10 环境
- Microsoft OfficeExcel 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=13And ActiveCell.Row>1Then 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 Sub4.4调试运行
调试 --> 编译 VBAProject --> 点击运行VB代码 --> 回到下拉复选框区域进行功能验证
运行效果:
4.5保存文件
需要将已经实现下拉复选框功能的.xlsx文件另存为.xlsm文件,这样才能在后续使用时保证下拉复选框功能正常使用。
正常保存后的.xlsm文件在使用时需要使用Microsoft Office Excel打开并要开启宏功能,才能够正常使用下拉复选框功能。
保存文件时选择“保存类型”为:
(多个下拉复选框实现效果要在VBA里面做调整)
引用自:Excel 单元格下拉复选框(多选项)——VBA 学习