背景
微软的excel软件,后缀为xlsx的表格文件。想要设置下拉框选项,并且可多选
设置下拉框(共3步)
1、选中单元格,点击数据,点击数据验证
2、在弹出的界面选择设置---->序列
3、输入想要设置的内容。内容之间用 英文 逗号隔开
4、看看效果
现在完成了设置下拉框,现在能够单选内容,如果没有多选的需求,到这一步就结束了。如果要多选,需要往表格中插入一段VBA代码。
下拉框多选(共3步)
1、确保设置表格类型为启用宏的工作簿.xlsm
2、查看表格的代码
3、在这里粘贴一段代码
Private Sub Worksheet_Change(ByVal Target As Range)
' Updated by Extendoffice 20240118
Dim xRng As Range
Dim xValue1 As String
Dim xValue2 As String
Dim delimiter As String
Dim TargetRange As Range
' 设置目标范围为当前工作表的已用范围
Set TargetRange = Me.UsedRange ' 用户可以在此处更改目标范围
delimiter = ", " ' 用户可以在此处更改分隔符
' 如果目标范围超过一个单元格或不在目标范围内,则退出
If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
On Error Resume Next
' 查找包含数据验证的单元格
Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
If xRng Is Nothing Then Exit Sub
Application.EnableEvents = False ' 禁用事件以避免递归调用
xValue2 = Target.Value
Application.Undo ' 撤销上一步操作
xValue1 = Target.Value
Target.Value = xValue2
' 只在下拉框单元格中进行合并操作
If xValue1 <> "" And xValue2 <> "" And Not Intersect(Target, xRng) Is Nothing Then
' 如果xValue1和xValue2不同且未被包含,则合并值
If Not (xValue1 = xValue2 Or _
InStr(1, xValue1, delimiter & xValue2) > 0 Or _
InStr(1, xValue1, xValue2 & delimiter) > 0) Then
Target.Value = xValue1 & delimiter & xValue2
Else
Target.Value = xValue1 ' 否则保持原值
End If
End If
Application.EnableEvents = True ' 重新启用事件
On Error GoTo 0 ' 重置错误处理
End Sub
4、备注
修改代码后测试一下其它非下拉框的单元格能否正常写入、修改内容。因为之前在网上复制的一段代码,会出现修改原始内容变成追加新内容,上面的代码是修改后的,经过我的初步使用没有问题。若是发现问题欢迎留言。