当用户在一系列单元格中输入值时,应添加数据验证

时间:2014-08-15 06:37:36

标签: excel vba excel-vba

我知道如何根据一个单元格值向单元格添加数据验证列表,但是如果在一系列单元格中输入值,如何将数据验证列表添加到单元格?例如,在下面的图像中,单元格范围是 D8:H19 ,此范围是动态的(列不会更改,但行数会增加)。

如果用户在任何单元格中输入值(以黄色D8:H19突出显示),则应在同一行A列中添加数据验证列表。

有人可以帮我处理代码吗?

这是图片enter image description here

3 个答案:

答案 0 :(得分:1)

实际上在StackExchange中多次被问到。试试这个Dynamic range

答案 1 :(得分:1)

Validation.Add方法用于使用vba验证数据

答案 2 :(得分:1)

您可以创建一个工作表事件过程,该过程会在工作表中将单元格或单元格块的内容更改为以下时自动执行:

  • 确定您的动态参考范围
  • 找到要更改的单元格或单元格块与您的引用范围
  • 之间的交集
  • 如果此交集实际返回一个Range,则循环遍历此范围的每个单元格并执行您的操作

这是一个您可以使用的框架 - 将其粘贴在工作表代码模块中,并使用满足您需求的代码完成:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngInput As Range
    Dim rngTotal As Range
    Dim rngIntersect As Range
    Dim lgInputLastRowNum As Long

    Set rngTotal = Range("A:A").Find(what:="Total", LookAt:=xlPart, MatchCase:=False)

    If rngTotal Is Nothing Then
        MsgBox "No TOTAL found. Exit Sub"
        Exit Sub
    End If

    lgInputLastRowNum = rngTotal.row - 1

    Set rngInput = Range("D8:H" & lgInputLastRowNum)

    Set rngIntersect = Intersect(Target, rngInput)

    If Not rngIntersect Is Nothing Then
        For each cell in rngIntersect
            'Do your thing here
            'To select the cell in column A on the same row as your cell
            'do Range("A" & cell.row)
        Next cell
    End If

End Sub