Excel - 多项选择下拉列表 - 不重复选择

2024-04-05

我在 Excel 电子表格上开发了可以使用以下代码在下拉列表中选择多个项目的方法:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then

Else
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal
    If oldVal = "" Then

      Else
      If newVal = "" Then

      Else
      Target.Value = oldVal _
        & ", " & newVal

      End If
    End If
End If


exitHandler:
  Application.EnableEvents = True
End Sub

但是,我现在想验证下拉列表项只能选择一次的答案。优选地,如果用户再次选择该项目,则将其删除。

任何帮助将不胜感激。


尝试这个:

Private Sub Worksheet_Change(ByVal Target As Range)
    Const SEP As String = ", "
    Dim rngDV As Range
    Dim oldVal As String
    Dim newVal As String
    Dim arr, m, v
    If Target.Count > 1 Then GoTo exitHandler

    On Error Resume Next
    Set rngDV = Target.SpecialCells(xlCellTypeSameValidation)
    On Error GoTo exitHandler
    If rngDV Is Nothing Then Exit Sub
    
    newVal = Target.Value
    If Len(newVal) = 0 Then Exit Sub 'user has cleared the cell...
    
    Application.EnableEvents = False
    
    Application.Undo
    oldVal = Target.Value
    
    If oldVal <> "" Then
        arr = Split(oldVal, SEP)
        m = Application.Match(newVal, arr, 0)
        If IsError(m) Then
            newVal = oldVal & SEP & newVal
        Else
            arr(m - 1) = ""
            newVal = ""
            For Each v In arr
                If Len(v) > 0 Then newVal = newVal & IIf(Len(newVal) > 0, SEP, "") & v
            Next v
        End If
        Target.Value = newVal
    Else
        Target.Value = newVal 'EDIT
    End If

exitHandler:
      Application.EnableEvents = True
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel - 多项选择下拉列表 - 不重复选择 的相关文章

  • 从受密码保护的 Excel 文件到 pandas DataFrame

    我可以使用以下命令打开受密码保护的 Excel 文件 import sys import win32com client xlApp win32com client Dispatch Excel Application print Exce
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足
  • 即使 Excel 中存在多条记录,CopyFromRecordset 也仅复制并粘贴第一行

    我有一个包含表格数据的 Excel 工作表 strSQL SELECT S FIELD NAME1 S FIELD NAME2 S FIELD NAME3 from SourceData A1 IV6 S Dim cn as ADODB C
  • Excel 宏与 Javascript

    我希望使用 Javascript 中的宏而不是默认的 VBA 来操作 Excel 电子表格 我可以使用以下 VBA 代码执行 javascript 代码 javascript to execute Dim b As String b fun
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • 由于直接引用范围而不是通过中间变量而导致 Excel VBA 运行时错误 450

    当我尝试直接引用某个范围内的值时 出现运行时错误 450 但如果我使用中间变量 它就会起作用 我不明白为什么 所以我担心在将来的某个时候我会再次遇到错误而不知道为什么 我尝试过使用 With End With 块 但当我直接引用范围时它仍然
  • VBA 访问:从另一个表单的代码刷新一个表单

    编辑 没关系有人帮助了我 form name recalc 或 form name refresh form main recalc 我有两种形式 主要 详细信息 在 主 表单中 我有一个在对话框中打开 详细信息 的按钮 问题是我在 详细信
  • MS Access 中的舍入

    VBA Access 中舍入的最佳方法是什么 我目前的方法是利用Excel方法 Excel WorksheetFunction Round 但我正在寻找一种不依赖Excel的方法 请注意 VBA Round 函数使用 Banker 舍入 将
  • 标准 VBA 函数“找不到项目或库”

    因此 我必须在我的 PC 上运行别人的 Excel 应用程序 并且在标准函数 如日期 格式 十六进制 中间等 上收到 找不到项目或库 的信息 一些研究表明 如果我在这些函数前加上 VBA 前缀 如 VBA Date 中那样 它会正常工作 网
  • 如何在未安装 Office 的情况下以编程方式创建、读取、写入 Excel?

    我对所有读取 写入 创建 Excel 文件的方法感到非常困惑 VSTO OLEDB 等 但它们都seem具有必须安装office的要求 这是我的情况 我需要开发一个应用程序 它将以 Excel 文件作为输入 进行一些计算并创建一个新的 Ex
  • 如何在不滚动的情况下截取整个电子邮件正文?

    我正在使用 OL2010 想要制作整个电子邮件的屏幕截图 不仅仅是 屏幕 可以用VBA或者外部程序来完成吗 有一个类似的问题 https stackoverflow com questions 4176340关于如何使用 C 实现这一点 注
  • OpenArgs 为空问题

    我正在使用OpenArgs使用时发送值的参数DoCmd OpenForm DoCmd OpenForm frmSetOther acNormal acFormAdd acDialog value 然后我用Me OpenArgs在打开的表格内
  • VBA XML V6.0 如何让它等待页面加载?

    我一直在努力寻找答案 但似乎找不到任何有用的东西 基本上 我是从一个网站上拉取的 当您在该页面上时 该网站会加载更多项目 我希望我的代码在加载完成后提取最终数据 但不知道如何让 XML httprequest 等待 Edited Sub p
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • Apache poi setformula 不适用于 SE

    我正在尝试在 XSSFCell With POI 中设置公式 Cell setFormula SE D87 0 D80 D87 错误是 名称 SE 在当前工作簿中完全未知 Why 看起来您正在尝试创建一个IF公式 我发现这一页 http w
  • 复制一张工作表上的静态范围,然后根据单元格中的单个值粘贴到另一张工作表中的动态范围

    我对这个问题分为三个部分 我在 Sheet1 A1 中有一个带有周数的单元格 我在 Sheet1 B1 F1 中有一个需要复制的静态范围 然后 我需要将该值粘贴到 Sheet2 中的动态范围中 偏移量为行的周数 这是我正在为我经常使用的工作
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • 根据单元格值向用户窗体添加复选框

    我对 VBA 很陌生 只有 3 天 但我发现它非常有用且易于使用 但现在我面临一个问题 我需要制作一个具有不同复选框的用户窗体 但我需要根据工作表某一列中使用的信息自动添加它们 我相信我可以使用 For Each Next 但我真的不知道如

随机推荐

  • strtotime() 的结果是否会根据时区而改变?

    I used strtotime datetime 在 PHP 中将文本日期时间描述转换为 Unix 时间戳 参见下面的代码 datetime 2012 04 17 00 00 00 timestamp strtotime datetime
  • 使用 Enter 按键事件和鼠标单击触发提交按钮

    我是一个完全的初学者 正在使用 Just do it 和以项目为中心的路线学习前端 我的网络应用程序的工作原理基本上与待办事项列表类似 我认为这是因为我对同一个元素有两次 getElementById 这最初有效 add idea to l
  • Kendo Grid - 它自己的加载指示器

    Kendo grid在网格加载 分页 排序时自动提供自己的Loading指示器 它运行良好 但我不希望显示 隐藏这个内置加载指示器 如何禁用此功能 请建议我 谢谢 维诺斯 很简单 用CSS隐藏就可以了 您的选择器需要比内置 Kendo 类更
  • 如何在 C# 中使 winforms 进度条垂直移动?

    我正在开发 WinForms Jukebox 我想要一个垂直的进度条来控制音量 有谁知道这是怎么做到的吗 我不知道我会使用进度条control音量 但要display您可以使用用户绘制的控件来调整音量级别 或者您可以仅使用背景颜色调整标签的
  • 如何在 angular2 中访问父组件中的子组件 HTML 元素值?

    我使用下面的代码在父组件的按钮单击期间访问父组件中的子组件 HTML 元素值 子组件 ts Component selector child component template
  • 关于转向多层 Delphi 架构的建议

    我们有一个与 Firebird 紧密相关的相对较大的应用程序 存储过程 视图等 我们现在收到很多支持其他数据库的请求 我们还希望将很多功能从客户端转移到服务器 现在似乎是迁移到 3 4 层架构的好时机 我们已经了解了 DataSnap 20
  • 如何将变量从 Express.js 传递到 Angular11 通用 SSR

    简单的问题 我们如何从expressjs传递到角度通用HTML组件或主应用程序index html变量 比如从expressjs到ejs或pug app get req res gt res render index req messsag
  • Sublime Text 2 突出显示装订线

    默认情况下 当插入符号位于 Sublime Text 2 中的行号 装订线区域时 该行会突出显示 我怎样才能将其关闭 我看到隐藏装订线的选项 但我希望行号可见 谢谢 要关闭行突出显示 请转到preferences gt settings U
  • Phonegap 页面旋转错误,在横向模式下显示为纵向

    我有一个 简单的 网页打包在phonegap 应用程序中 如果我启动应用程序 它会以纵向显示页面 横向页面宽度 所以文本从左下到左上开始 右侧有一个空白 页面应该在此处结束 这是我所看到的 在我的中支持的方向是横向左和右 Info plis
  • 是否可以使用 XSLT 跳过层次结构中的级别?

    层次结构采用 XML 格式 我使用 XSLT 来转换数据 例如 如果层次结构有 4 个级别 并且我想跳过中间的一个级别 例如第 3 级 Level 1 Level 2 Level 3 Skip this level Level 4 Leve
  • 仅使用 CSS 的最大高度和最大宽度

    我的第一篇文章在这里 我使用 div 以相同的比例 180wx170h 裁剪缩略图 在处理肖像和风景图像时 我陷入了困境 如果我使用它 这对于肖像风格的图像来说很好 crop img max height 170px width auto
  • 为 C# 应用程序制作安装程序并将 .NET Framework 安装程序包含到安装程序中

    我已经完成了 C 应用程序 但有一个小问题 当我尝试在另一台 PC 上运行应用程序时 我始终需要安装 NET Framework 4 0 有什么办法可以使其工作而无需从互联网安装框架吗 我之前尝试过创新设置 http www jrsoftw
  • JVM跳转指令的偏移量怎么会是32768呢?

    在写一个回答有关 JVM 字节码偏移量的问题 https stackoverflow com a 30240357 3182664 我注意到 javac 的行为和生成的类文件中有一些我无法解释的内容 当编译这样的类时 class FarJu
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么?

    场景是我有很多 FieldRenderer 这些应该从不同的地方输出数据 一些来自项目 X 另一些来自项目 Y 并且应该输出项目 Z 的属性 假设我有公共财产ItemX我想从中输出一个属性 以下任何一个都可以 但我没有得到他们中任何一个的输
  • Angular2 路由 - 当路由更改时保持组件的状态[重复]

    这个问题在这里已经有答案了 我有一个应用程序 其视图位于路由后面 我需要能够从路由更改时的位置继续 但返回后 组件处于初始状态 有什么办法可以保持组件的状态吗 update 2 现在已针对新路由器修复了这个问题 Angular 2 3 ht
  • 如何在 MATLAB 中随机排列 3D 矩阵中的列

    我有 3D 矩阵 10000 x 60 x 20 我需要排列第二维和第三维以保持列完整 对于 2D 矩阵 我使用 RANDPERM pidx randperm size A 2 Aperm A pidx 我不能只应用 RANDPERM 两次
  • 如何在表中表示 nil

    假设我想存储一个元素列表 包括一些零值 值的位置很重要 我需要表示列表中给定位置处不存在值 这里有一个问题 a 1 2 3 nil 4 for k v in ipairs a do print k v end print a 4 print
  • html中的方括号是什么意思?

    我现在正在协助一个项目 第一次构建模板 试图解决一些问题 但 html 中令我困惑的一个方面是方括号中的某些内容 我以前从未在 html 中使用过这些 所以我只是想知道它们的用途 当我在浏览器中打开页面时 它们都显示为文本 这是一些代码 d
  • Excel - 多项选择下拉列表 - 不重复选择

    我在 Excel 电子表格上开发了可以使用以下代码在下拉列表中选择多个项目的方法 Private Sub Worksheet Change ByVal Target As Range Dim rngDV As Range Dim oldVa