Как синхронизировать несколько ячеек ввода Excel
Этот вопрос был задан и получен ответ еще в 2010 году, но когда я следую указаниям почтенного мистера Баггабилла, а затем запускаю макрос (редактируя целевую ячейку), Excel быстро падает. Код выглядит так:
Private Sub Worksheet_Change(ByVal target As Range)
If target.Address = "$A$1" Then
ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value = target.Value
End If
End Sub
Я создал одну версию макроса в Sheet1 (которая переводит целевое значение в A1 на Sheet2) и другую версию макроса в Sheet2 (которая делает обратное). При наличии только одного макроса это работает нормально, но я намерен ввести значение на любом листе и распространить новое значение в обеих входных ячейках. Сбой Excel, потому что это круговая ссылка, верно? Это можно обойти?
2 ответа
Я подозреваю, что это не круговая ссылка, а переполнение стека;)
Вы могли бы рассмотреть возможность отключения событий при выполнении ваших макросов.
Application.EnableEvents = False
...
Application.EnableEvents = True
Таким образом, другой обработчик событий не будет вызываться, когда вы кладете значения на другой лист.
Просто добавьте еще один, если внутри первый.
Private Sub Worksheet_Change(ByVal target As Range)
If target.Address = "$A$1" Then
If ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value <> target.Value
ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value = target.Value
End If
End If
End Sub
Это должно остановить его от попытки выполнения, когда два значения уже совпадают. Он проверяет, являются ли они одинаковыми перед обновлением.