Q:如图1所示,在单元格C1中设置了数据有效性,列表数据来源于单元格区域A1:A3。这里,将单元格区域A1:A3命名为testData?
Q:如图1所示,在单元格C1中设置了数据有效性,列表数据来源于单元格区域A1:A3。这里,将单元格区域A1:A3命名为testData?
图1
然而,当我修改了单元格区域A1:A3中的数据后,单元格C1中的数据不会自动相应修改,如图2所示。
图2
如何实现数据源中的数据修改后,设置了数据有效性的单元格中的数据相应地自动修改?
A:下面使用工作表的Change事件来实现,代码如下:
Private SubWorksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim rngFound As Range
‘当名称为testData的区域数据改变时
If Not Intersect(Target,Me.Range(“testData”)) Is Nothing Then
‘遍历工作表中的数据有效性单元格
For Each rng InMe.Cells.SpecialCells(xlCellTypeAllValidation).Cells
‘如果单元格中的数据有效性设置为区域testData
If rng.Validation.Formula1 =”=testData” Then
‘检查该单元格中的值是否在区域testData列表值中
Set rngFound =Me.Range(“testData”).Find(rng.Value, , xlValues, xlWhole)
‘如果值不在列表中,命名区域中的数据一定被修改了,因此单元格值进行相应的修改
If rngFound Is Nothing Then
Application.EnableEvents =False
rng.Value = Target.Value
Application.EnableEvents =True
End If
End If
Next rng
End If
End Sub
运行后的效果如下图3所示。
图3