我有一张包含许多下拉列的 Excel 工作表。假设其中一列包含 Test1、Test2 和 Test3 作为下拉选项值。此列下的单元格不应接受除这三个值以外的值。如果我将“XYZ”复制并粘贴到这些单元格中,它不应该接受。有人能帮我解决这个问题吗?
答案1
设置数据验证
您需要使用 Excel 中的数据验证功能将单元格限制为特定文本。在您的例子中:“Test1”、“Test2”和“Test3”
选择仅应接受值“Test1”、“Test2”和“Test3”的单元格
在数据选项卡中数据工具组,点击数据验证按钮。
在里面允许:下拉,选择列表
在里面来源:字段,输入测试1,测试2,测试3
点击好的应用更改。
此时,您在步骤 1 中选择的每个单元格都将有一个与之关联的下拉列表。电子表格的用户只能输入测试1,测试2, 或者测试3如果他们尝试输入其他任何内容,则会收到以下错误消息:
如果需要,您可以单击錯誤警示选项卡。
防止复制/粘贴经过数据验证的单元格
这种方法效果很好,但有人将内容粘贴到单元格上方的情况除外。防止这种情况发生的唯一方法是编写一个宏来检测单元格的更新,确定单元格上是否启用了数据验证,然后如果启用则拒绝粘贴。
- 选择所有具有数据验证的单元格并命名它们数据有效性范围。您可以通过在公式栏左侧(单元格地址所在的位置)键入名称来命名单元格范围。
- 在工作表(例如 Sheet1)的代码模块中,添加以下代码:
Private Sub Worksheet_Change(ByVal 目标作为范围) '验证范围还有验证吗? 如果 HasValidation(Range("DataValidationRange")) 那么 退出子程序 别的 应用程序.撤消 MsgBox“错误:您无法将数据粘贴到这些单元格中。”&_ “请使用下拉菜单输入数据。”,vbCritical 万一 子目录结束 私有函数 HasValidation(r) 作为布尔值 '如果 Range r 中的每个单元格都使用数据验证,则返回 True 出错时继续下一步 x = r.验证.类型 如果 Err.Number = 0 则 HasValidation = True 否则 HasValidation = False 结束函数
不幸的是,VBA 是阻止某人粘贴单元格的唯一方法。从一开始,这一直是 Excel 中数据验证的一个问题。希望它能有所帮助。
答案2
一个更简单的解决方案是完全禁用粘贴到工作簿的功能。我刚刚在这里找到了解决方案: http://www.vbaexpress.com/kb/getarticle.php?kb_id=373