当用户在一系列单元格中input一个值时,应该添加数据validation

我知道如何基于一个单元格值将数据validation列表添加到单元格,但是如何在单元格区域中input值时将数据validation列表添加到单元格中? 例如在下面的图像单元格范围是D8:H19 ,这个范围是dymanic(列不会改变,但行数将增加)。

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

有人可以帮助我的代码?

这是图像 在这里输入图像说明

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

  • 确定你的参考dynamic范围
  • find正在更改的单元格或单元块与您的参考范围之间的交集
  • 如果这个交点实际上返回一个范围,然后遍历这个范围的每个单元格,并做你的事情

这里有一个你可以使用的框架 – 将其粘贴在工作表代码模块中,并用你想要的代码完成:

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 

实际上,在StackExchange中多次提到过。 试试这个dynamic范围 。

Validation.Add方法用于使用vbavalidation数据