怎么在excel单元格里设置选项可以多选?(超简单,亲测有效)

今天小编给大家分享的表格小技巧是:如何制作显示多列同时可以选择多项的下拉菜单?比如下图,显示三列下拉菜单,可以选择任意多个项目合并到一个单元格,步骤超级简单,小编亲测有效。

怎么在excel单元格里设置选项可以多选?

1、首先,咱们得有个数据表,用来填充选项菜单的数据。嗯,我们把这份工作表命名为“参数表”,数据如下图所示。A列是商品代码,B列是商品,C列是负责人。

2、然后,我们在需要制作选项菜单的工作表放一个列表框控件。

3、在【开发工具】选项卡下单击【插入】按钮,在弹出来的选项菜单中选择ActiveX控件列表框,画在当前工作表。位置随便,大小不论,丑美无关……毕竟这些你说了都不算,待会代码会重置。

需要说明的是,如果这是你在当前工作簿放置的第1个列表框控件,它会被系统名称为ListBox1。名字很重要,——下面的代码,我们都是通过名字来控制控件的一生的。

4、最后退出设计模式,也就是点击【开发工具】选项卡下的【设计模式】按钮。

5、OK,最后把以下代码复制粘贴到目标工作表的VBE编辑窗口即可。比如我们这里是粘贴到名称为“入库单”工作表。

代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column 2 Or Target.Row 1 Or Target.Rows.Count > 1 Then ListBox1.Visible = False: Exit Sub

'如果选中的单元格大于1个,则退出程序

With Sheets("参数表")

r = .Range("a1:c" & .Cells(Rows.Count, "a").End(xlUp).Row).Value

End With

With ListBox1

'调整位置到单元格处

.Top = Target.Top 'listBox的顶端位置

.Left = Target.Left + Target.Width 'listBox的左端位置

.Width = 250 '宽度

.Height = 150 '高度

.Visible = True '可见

'.ColumnHeads = True '显示标题

.ColumnCount = 3 '三列

.ColumnWidths = "50;120;50" '设置第一列宽度50第二列宽度120……

.List = r '数据来源

.MultiSelect = fmMultiSelectMulti '允许通过鼠标点击的方式进行多选

.ListStyle = fmListStyleOption '选项按钮设置为方形

End With

End Sub

Private Sub ListBox1_Change()

Dim i As Long, strMy As String

With ListBox1

If .Selected(0) = True Then .Selected(0) = False

'如果用户选取的是标题行那么撤销选取

For i = 1 To .ListCount - 1

'遍历listBox的记录,如果被选中则按换行符合并

If .Selected(i) = True Then

strMy = strMy & vbCrLf & .List(i, 1)

'取list的第二列

'无论列还是行的索引都是从0开始的,因此第二列为1

End If

Next

End With

ActiveCell.Value = Mid(strMy, 3)

'数据写入单元格

End Sub

代码组成说明

1、一部分是工作表的Worksheet_SelectionChange事件。当用户选择目标范围内的单元格时,显示设置列表框的位置、大小和数据。本例中列表框只出现在B列,且行数大于3的情况下。这个可以根据实际情况,自己进行修改

2、另一部分是列表框的ListBox1_Change事件,当用户选择列表框的数据时,将数据写入单元格。相关代码都有注释。

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...