ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 用数据有效性设置了下拉列表后,当输入了不在列表的数据时如何能自动将该值加入到列表

用数据有效性设置了下拉列表后,当输入了不在列表的数据时如何能自动将该值加入到列表

作者:绿色风 分类: 时间:2022-08-17 浏览:146
楼主
水星钓鱼
Q:用数据有效性设置了下拉菜单后,当输入了不在菜单的数据时如何能自动将该值加入到菜单中?
A:首先必须将所有数据有效性的出错警告改为“信息”,然后在需要执行这样操作的工作表模块代码中输入以下代码:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim arr, temp
  3. Dim i As Integer
  4. On Error GoTo solution
  5. With Target.Validation
  6.     If .Type = xlValidateList Then
  7.         If .Formula1 Like "=*" Then
  8.             arr = Application.Evaluate(.Formula1)
  9.             If UBound(arr, 1) = 1 Then
  10.                 arr = Application.WorksheetFunction.Index(arr, 1, 0)
  11.                 temp = Filter(arr, Target)
  12.                 If UBound(temp) < LBound(temp) Then
  13.                     i = UBound(arr) + 1
  14.                     ReDim Preserve arr(1 To i)
  15.                     arr(i) = Target
  16.                     Target.Validation.Modify Type:=xlValidateList, Formula1:=Join(arr, ",")
  17.                 End If
  18.             Else
  19.                 arr = Application.WorksheetFunction.Transpose(arr)
  20.                 temp = Filter(arr, Target)
  21.                     If UBound(temp) < LBound(temp) Then
  22.                         i = UBound(arr) + 1
  23.                         ReDim Preserve arr(1 To i)
  24.                         arr(i) = Target
  25.                         Target.Validation.Modify Type:=xlValidateList, Formula1:=Join(arr, ",")
  26.                     End If
  27.             End If
  28.         Else
  29.             arr = Split(.Formula1, ",")
  30.             temp = Filter(arr, Target)
  31.             If UBound(temp) < LBound(temp) Then
  32.                 i = UBound(arr) + 1
  33.                 ReDim Preserve arr(0 To i)
  34.                 arr(i) = Target
  35.                 Target.Validation.Modify Type:=xlValidateList, Formula1:=Join(arr, ",")
  36.             End If
  37.         End If
  38.     End If
  39. End With
  40. Exit Sub
  41. solution:
  42.     Exit Sub
  43. End Sub
以上代码分别判断了数据有效性下拉列表的三种数据源,分别为垂直的单元格区域、水平的单元格区域、手动输入的用逗号分隔的列表项,然后分别对这些数据源提取列表项转化为数组,最后用数组作为下拉列表的数据源。
附件如下:

数据有效性.rar
2楼
rongjun
学习了
3楼
飞虎
学习了一下
4楼
WDZ
学习了
5楼
老糊涂

免责声明

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

评论列表
sitemap