Q:如圖1所示,在單元格C1中設(shè)置了數(shù)據(jù)有效性,列表數(shù)據(jù)來(lái)源于單元格區(qū)域A1:A3。這里,將單元格區(qū)域A1:A3命名為testData?
圖2
如何實(shí)現(xiàn)數(shù)據(jù)源中的數(shù)據(jù)修改后,設(shè)置了數(shù)據(jù)有效性的單元格中的數(shù)據(jù)相應(yīng)地自動(dòng)修改?
A:下面使用工作表的Change事件來(lái)實(shí)現(xiàn),代碼如下:
Private SubWorksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim rngFound As Range
‘當(dāng)名稱為testData的區(qū)域數(shù)據(jù)改變時(shí)
If Not Intersect(Target,Me.Range(“testData”)) Is Nothing Then
‘遍歷工作表中的數(shù)據(jù)有效性單元格
For Each rng InMe.Cells.SpecialCells(xlCellTypeAllValidation).Cells
‘如果單元格中的數(shù)據(jù)有效性設(shè)置為區(qū)域testData
If rng.Validation.Formula1 =”=testData” Then
‘檢查該單元格中的值是否在區(qū)域testData列表值中
Set rngFound =Me.Range(“testData”).Find(rng.Value, , xlValues, xlWhole)
‘如果值不在列表中,命名區(qū)域中的數(shù)據(jù)一定被修改了,因此單元格值進(jìn)行相應(yīng)的修改
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
運(yùn)行后的效果如下圖3所示。
圖3