设置数据验证

设置数据验证

我有一张包含许多下拉列的 Excel 工作表。假设其中一列包含 Test1、Test2 和 Test3 作为下拉选项值。此列下的单元格不应接受除这三个值以外的值。如果我将“XYZ”复制并粘贴到这些单元格中,它不应该接受。有人能帮我解决这个问题吗?

答案1

设置数据验证

您需要使用 Excel 中的数据验证功能将单元格限制为特定文本。在您的例子中:“Test1”、“Test2”和“Test3”

  1. 选择仅应接受值“Test1”、“Test2”和“Test3”的单元格

  2. 数据选项卡中数据工具组,点击数据验证按钮。

    Office 功能区中的数据验证位置

  3. 在里面允许:下拉,选择列表

  4. 在里面来源:字段,输入测试1,测试2,测试3

    数据验证设置

  5. 点击好的应用更改。

此时,您在步骤 1 中选择的每个单元格都将有一个与之关联的下拉列表。电子表格的用户只能输入测试1测试2, 或者测试3如果他们尝试输入其他任何内容,则会收到以下错误消息:

在此处输入图片描述

如果需要,您可以单击錯誤警示选项卡。

防止复制/粘贴经过数据验证的单元格

这种方法效果很好,但有人将内容粘贴到单元格上方的情况除外。防止这种情况发生的唯一方法是编写一个宏来检测单元格的更新,确定单元格上是否启用了数据验证,然后如果启用则拒绝粘贴。

  1. 选择所有具有数据验证的单元格并命名它们数据有效性范围。您可以通过在公式栏左侧(单元格地址所在的位置)键入名称来命名单元格范围。
  2. 在工作表(例如 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

相关内容