克里斯使用了一种数据验证技术,该技术可以成功地阻止在列中输入非唯一信息。 (此技术在_ExcelTips_的先前发行版中进行了介绍。)他正确地指出,数据验证仍然存在问题,但是:有人可以将信息粘贴到单元格中,并成功绕过所有适当的检查。

例如,如果您在单元格A8中键入“乔治”,然后键入“乔治”

在A9中,常规数据验证会产生一个错误,正如您所期望的那样,表明您尝试输入的值不是唯一的。

但是,如果在单元格A8中键入“乔治”,将其复制并粘贴到单元格A9中,则不会触发数据验证错误-允许粘贴。

在Excel中,没有直接的方法可以解决此问题。但是,无论何时尝试粘贴,都可以使Excel进行一些检查。请考虑以下宏:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error Resume Next     For Each TmpRng In Target         TmpVal = TmpRng.Validation.Type         If TmpVal > 0 Then             If Application.CutCopyMode = 1 Then                 MsgBox "You cannot paste into validated cells."

Application.CutCopyMode = False                 Exit Sub             End If         End If     Next End Sub

当选择在工作表中改变这个宏只运行。 (此代码必须在工作表的代码窗口中。)它检查目标单元格(正在选择的单元格),并且如果用户试图粘贴到激活了验证的单元格中,它将不允许它。

此外,用户将看到一个指示错误的对话框。

您应该注意,此例程仅检查是否已粘贴到经过数据验证的单元格中。如果是,则生成错误。

例程不会检查目标单元格中​​的验证规则下实际是否允许粘贴的内容;这将更加复杂,并且需要更多的编码。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2449)适用于Microsoft Excel 97、2000、2002和2003。