美文网首页
Excel 单元格下拉复选框(多选项)——VBA 学习

Excel 单元格下拉复选框(多选项)——VBA 学习

作者: 自由而灿烂的神 | 来源:发表于2021-08-09 23:22 被阅读0次

我们在制作excel表格模板的时候,为了控制用户的输入,会将单元格设置数据验证格式,如下图:

单选

但数据验证只支持单选项,无法支持多选,那么,我们如何实现下拉复选框,实现多个选项勾选呢?(如下图)

下拉复选框

实验开始:

环境:Excel 2016

支持:VBA支持库(没有安装的,需要安装哦)

第一步:准备数据源

新建一个Excel表格,sheet1创建4列表头字段,sheet2用来存放选项值,我们以“爱好”、“学习课程”为例来实现下拉复选框

sheet1 sheet2

第二步:调出开发工具

文件 >> 选项 >> 勾选 “开发工具”,点击“确定”。

第三步:插入列表框控件

开发工具 >> 插入 >> ActiveX 控件  >> 列表框控件,绘制控件。

第四步:设置列表框控件属性

如下图,绘制好的列表框控件名称默认为“ListBox1”,当前为“设计模式”,点击“属性”,进入设置。

在弹出的属性设置框中,设置好样式、多选、选项值的数据源范围(即sheet2 "爱好"一列的数据,不包括表头)。

用同样的方法,新添加一个列表框控件,注意第二个列表框为ListBox2,并设置相关属性,多选项的数据源范围为“Sheet2!B2:B8”。

第五步:启用VBA代码

在状态栏找到并点击“查看代码”,或是在活动表Sheet1右击,选择“查看代码”,进入VBA编辑器。

注:如果Excel没有安装VBA支持库的,需要先安装好哦~

将下方代码复制,并调试编译


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 ListBox2_Change()

If Reload Then Exit Sub '加载ListBox2

For i = 0 To ListBox2.ListCount - 1

If ListBox2.Selected(i) = True Then t = t & "," & ListBox2.List(i)

Next

ActiveCell = Mid(t, 2)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With ListBox1

        '第 2 列 且 单元格大于 1,因为表头的字段不需要进行多选

        If ActiveCell.Column = 2 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

With ListBox2

        '第 4 列 且 单元格大于 1,因为表头的字段不需要进行多选

        If ActiveCell.Column = 4 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


调试 >> 编译

再点击一次“设计模式”,让我们看看效果吧

超棒!nice!完结,撒花~

相关文章

  • Excel 单元格下拉复选框(多选项)——VBA 学习

    我们在制作excel表格模板的时候,为了控制用户的输入,会将单元格设置数据验证格式,如下图: 但数据验证只支持单选...

  • VBA 遍历Sheet

    Excel VBA 遍历单元格 单元格读取 Sub test() Dim str Dim i, j i = 1 j...

  • excel VBA

    零. excel 2016 开启VBA “Excel选项”对话框,单击“自定义功能区”选项, 在右侧的面板的列表框...

  • Excel单元格中加入下拉选项

    菜单→数据→数据验证→数据验证→验证条件:序列。

  • Excel形成单元格下拉选项

    工具:Excel2016 一、手动生成 目标:单元格中可以下拉从几个固定值中选择值,数据来源手动输入 二、自动生成...

  • 【非专业HR的自我修养】020 深淘滩 低作堰

    昨天在公司的Excel学习群学习了Excel中用公式制作二级下拉菜单, 1 定义名称:在公式点击“定义名称”选项,...

  • 【Excel VBA】之二 Excel对象模型

    Excel VBA 开发,就是将我们在Excel上的一些操作进行自动化。在Excel中我们最常操作的对象是单元格,...

  • VBA学习笔记-02

    VBA学习笔记 笔记摘抄自EXCEL精英培训-蓝色幻想 VBA学习笔记01(链接)VBA学习笔记02 (链接) 目...

  • VBA学习笔记-01

    VBA学习笔记 笔记摘抄自EXCEL精英培训-蓝色幻想 VBA学习笔记01(链接)VBA学习笔记02 (链接) 目...

  • Spring MVC 表单标签库

    文本框 密码处理 文本域 复选框 复选框(多选) 单选按钮 多项单选按钮 下拉选项 列表多选框 隐藏字段域 错误处...

网友评论

      本文标题:Excel 单元格下拉复选框(多选项)——VBA 学习

      本文链接:https://www.haomeiwen.com/subject/qpgtbltx.html