Это кажется опасным, но я не вижу никаких проблем с этим. В основном, если вы что-то меняете в Foobar, он ищет каждую ячейку на листе с проверкой данных. Если DV указывает на Foobar, а значение отсутствует в списке, то это должно быть значение, которое было изменено. Это сработало с моим ограниченным тестированием. Дайте мне знать, если вы видите какие-либо недостатки.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rCell As Range
Dim rFound As Range
'Only run this when a cell in Foobar is changed
If Not Intersect(Target, Me.Range("Foobar")) Is Nothing Then
'Go through every data validation cell in the sheet
For Each rCell In Me.Cells.SpecialCells(xlCellTypeAllValidation).Cells
'if the DV in the cell points to foobar
If rCell.Validation.Formula1 = "=Foobar" Then
'See if the cell's value is in the Foobar list
Set rFound = Me.Range("Foobar").Find(rCell.Value, , xlValues, xlWhole)
'If it's not in the list, it must be the one that
'changed, so changed it
If rFound Is Nothing Then
Application.EnableEvents = False
rCell.Value = Target.Value
Application.EnableEvents = True
End If
End If
Next rCell
End If
End Sub
Обратите внимание, что это относится к модулю рабочего листа, а не к стандартному модулю. Как всегда, протестируйте код на копии вашей рабочей книги.