繁体   English   中英

指向源单元格的数据验证

[英]Data Validation pointing to source cell

我在 A 列中使用了数据验证,如果输入重复数据,则会出现错误消息。 它只是显示错误,但没有告诉我数据在列中的位置。

我想知道的是 Excel 是否可以导航到源单元格,在其中比较重复值?

如果单元格 A2 = 12345 并且我尝试更新 A50 = 12345,Excel 会生成一条错误消息,但是否可以将光标指向单元格 A2,因为这是比较数据所在的位置?

我有同样的任务进出。 我的解决方案是有

  1. 接收两个范围(目标单元格、数据范围)的通用欺骗检查例程
  2. 一个WorkSheet_Change()事件触发了我想要的列的重复检查
  3. 工作表标题中用于错误消息输出的单元格

例子:

我已经提取了其中一个的重要部分......

让我们从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事件,它驻留在它所作用的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

等瞧

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM