Как синхронизировать несколько ячеек ввода 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

Это должно остановить его от попытки выполнения, когда два значения уже совпадают. Он проверяет, являются ли они одинаковыми перед обновлением.

Другие вопросы по тегам