ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 单元格内数据有效性选项的下拉多选

单元格内数据有效性选项的下拉多选

作者:绿色风 分类: 时间:2022-08-17 浏览:99
楼主
嘉昆2011
参考链接:
  1. http://blog.contextures.com/archives/2009/09/18/select-multiple-items-from-excel-data-validation-list/
问题陈述:
如何在单元格中实现数据有效性选项的复选,最终在单元格中显示所有选项?

效果图:

 

代码:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim rngDV As Range
  3. Dim oldVal As String, newVal As String
  4. Dim Pos As Long

  5. On Error Resume Next
  6. Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation) '设定含有数据有效性的区域
  7. If Not (Application.Intersect(Target, rngDV) Is Nothing) Then
  8.   Application.EnableEvents = False
  9.   newVal = Target.Value
  10.   Application.Undo
  11.   oldVal = Target.Value
  12.         Pos = InStr(1, oldVal, newVal)   '利用InStr函数二进制比较返回newVal在oldVal中首次出现的位置
  13.         If Pos > 0 Then
  14.             If Right(oldVal, Len(newVal)) = newVal Then '考虑撤选的两种情况
  15.                 Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 2)
  16.             Else
  17.                 Target.Value = Replace(oldVal, newVal & ", ", "")
  18.             End If
  19.         Else
  20.             If Len(oldVal) = 0 Then '考虑添选的两种情况
  21.                 Target.Value = newVal
  22.             Else
  23.                 Target.Value = oldVal & ", " & newVal
  24.             End If
  25.         End If
  26.     Application.EnableEvents = True
  27. End If

  28. End Sub
附件:

ET_DVMultipleItems_1024.rar

2楼
peakchu
占座学习
3楼
leo112233
真的帮助了非常大的忙**  
另外有疑问(已选择后再次选择相同项为悔选消掉,但最后留一个时无法实现悔选,就算编辑单元格内容删掉也留有不完整的信息)
该单元格不支持复制黏贴的吗?

哈哈~谢谢昆哥的帮忙
4楼
bensonlei
不错!学习来了。
5楼
闻启学
精彩 版主
6楼
wumin88838
学习了
7楼
QQDD
太棒了!
8楼
QQDD
要是能有复选框,一次就选择完毕就更棒了
9楼
kobunei2013
疑问:多选后,不能使用键盘上的“Backspace”键删除了,该怎么办呢?
10楼
andme
就是牛!要的就是这种方法
11楼
老糊涂
下载学习了
12楼
圈圈_。o_○
看不懂
13楼
Leah
怎么不能新插入行??!
14楼
pyatov
很有用 学习了
15楼
pyatov
还是不太明白 那段代码要复制到哪里去呢
16楼
嘉昆2011
Alt+F11,点击相关的工作表,选取Worksheet_Change事件,粘帖即可。
17楼
yytax2010
思路巧妙                  
18楼
yytax2010
使用delete键不能删除单元格。
19楼
yytax2010
请求解决单元格一键删除问题。
20楼
111111
如何指定到某一列才触发这个复选事件啊
21楼
嘉昆2011
参考链接:
  1. http://blog.contextures.com/archives/2009/09/18/select-multiple-items-from-excel-data-validation-list/
问题陈述:
如何在单元格中实现数据有效性选项的复选,最终在单元格中显示所有选项?

效果图:

 

代码:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim rngDV As Range
  3. Dim oldVal As String, newVal As String
  4. Dim Pos As Long

  5. On Error Resume Next
  6. Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation) '设定含有数据有效性的区域
  7. If Not (Application.Intersect(Target, rngDV) Is Nothing) Then
  8.   Application.EnableEvents = False
  9.   newVal = Target.Value
  10.   Application.Undo
  11.   oldVal = Target.Value
  12.         Pos = InStr(1, oldVal, newVal)   '利用InStr函数二进制比较返回newVal在oldVal中首次出现的位置
  13.         If Pos > 0 Then
  14.             If Right(oldVal, Len(newVal)) = newVal Then '考虑撤选的两种情况
  15.                 Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 2)
  16.             Else
  17.                 Target.Value = Replace(oldVal, newVal & ", ", "")
  18.             End If
  19.         Else
  20.             If Len(oldVal) = 0 Then '考虑添选的两种情况
  21.                 Target.Value = newVal
  22.             Else
  23.                 Target.Value = oldVal & ", " & newVal
  24.             End If
  25.         End If
  26.     Application.EnableEvents = True
  27. End If

  28. End Sub
附件:

ET_DVMultipleItems_1024.rar

22楼
peakchu
占座学习
23楼
leo112233
真的帮助了非常大的忙**  
另外有疑问(已选择后再次选择相同项为悔选消掉,但最后留一个时无法实现悔选,就算编辑单元格内容删掉也留有不完整的信息)
该单元格不支持复制黏贴的吗?

哈哈~谢谢昆哥的帮忙
24楼
bensonlei
不错!学习来了。
25楼
闻启学
精彩 版主
26楼
wumin88838
学习了
27楼
QQDD
太棒了!
28楼
QQDD
要是能有复选框,一次就选择完毕就更棒了
29楼
kobunei2013
疑问:多选后,不能使用键盘上的“Backspace”键删除了,该怎么办呢?
30楼
andme
就是牛!要的就是这种方法

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap