我在A列中使用了数据验证,如果输入了重复数据,则会显示错误消息。它只显示错误,但没有告诉我数据在列中的位置。
我想知道的是Excel是否可以导航到源单元格,其中重复值与之比较?
如果单元格A2 = 12345并且我尝试更新A50 = 12345,Excel会生成错误消息,但它是否可以将光标指向单元格A2,因为这是比较数据的位置?
答案 0 :(得分:0)
我在&出。我的解决方案是
WorkSheet_Change()
事件触发了我希望它的列的检查示例:强>
我已经提取了其中一个的重要部分......
让我们从DupeCheck()
开始......它正在一个范围(DataRange
)中运行,并返回与要测试的Target
具有相同值的第一个单元格。此函数驻留在自己的模块中。像这样,它可以被同一工作簿中的多个工作表使用。
Function DupeCheck(Target As Range, DataRange As Range) As Range
Dim DataCell As Range
Set DupeCheck = Nothing
' compare each cell of DataRange with Target
For Each DataCell In DataRange.Cells
' exclude Target which may be part of DataRange per se
If Intersect(DataCell, Target) Is Nothing Then
If DataCell = Target Then
' duplicate found ... terminate on first find
Set DupeCheck = DataCell
Exit For
End If
End If
Next DataCell
End Function
现在让我们看一下Worksheet_Change
事件,它位于其所处理的工作表的代码区域中。在我的情况下,我有大量的验证,但我减少了示例以仅包含相关代码...这里我们检查单元格更改是否适用于列A,在这种情况下我们触发DupeCheck()
函数,并取决于将错误消息返回,设置或清除到名为[ErrorMessage]的工作表上的单元格中...这里我们当然可以将光标定位到重复的单元格中(例如TempR.Select
...品味问题)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TempR As Range
' various validations
' always break on first error found
' output to named range ErrorMessage
' Dupe Check for PoP ID (column A)
If Target.Column = 1 Then
Set TempR = DupeCheck(Target, Range("A1:A50"))
If Not TempR Is Nothing Then
[ErrorMessage] = "Duplicate ID in " & TempR.AddressLocal
Else
[ErrorMessage] = ""
End If
' ElseIf Target.Column = 4 Then ' other validations (deleted)
' ....
End If
End Sub
etvoilà