Q:如圖1所示,在單元格C1中設置了數據有效性,列表數據來源于單元格區域A1:A3。這里,將單元格區域A1:A3命名為testData?
圖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