Добрый день! Помогите, пожалуйста, советом как избежать зацикленности при условном реагировании на изменение ячейки?
Есть столбец из трёх значений A1,А2,А3. Нужно при изменении значения одной из этих трёх ячеек поменять значения в двух других(на "1","2" или "3" в зависимости от того какую строчку изменили).
У меня возникает зацикленность макроса, которую я никак не могу победить. Хотя выход из процедуры (Exit Sub) стоит в каждом из случаев. Вот мой текст макроса и функции:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"
macro1
Exit Sub
Case "$A$2"
macro2
Exit Sub
Case "$A$3"
macro3
Exit Sub
End Select
End Sub
----------------------------------------- а это сами функции изменения:
Код
Function macro1()
Cells(2, 1).Value = "1"
Cells(3, 1).Value = "1"
End Function
Function macro2()
Cells(1, 1).Value = "2"
Cells(3, 1).Value = "2"
End Function
Function macro3()
Cells(1, 1).Value = "3"
Cells(2, 1).Value = "3"
End Function
Код следует оформлять соответствующим тегом. Ищите такую кнопку <...> и исправьте своё сообщение. По вопросу: отключайте отслеживание событий на время работы макроса. Только не забудьте потом включить. Application.EnableEvents = False
supercat, все верно, exit sub лишнее. Я просто думал, что без него выполняются следующие условия и поэтому получается зацикленность, но в итоге проблема решилась другим способом, который подсказал уважаемый Юрий.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lVal As Long
If Not Application.Intersect(Range("A1:A3"), Target) Is Nothing Then
Application.EnableEvents = False
lVal = Target.Value
Range("A1:A3").Value = Target.Row
Target.Value = lVal
Application.EnableEvents = True
End If
End Sub