Предупреждение защищенной ячейки при возврате в исходную ячейку после двойного щелчка

#excel #vba

#excel #vba

Вопрос:

Не очень критично, потому что есть способы обойти это, но любопытно, почему это происходит? Протестировал это на совершенно новом WB, чтобы убедиться, что это не было чем-то другим, скрытым в моем коде, вызывающим это. У меня есть рабочая книга с защищенным листом, где я вызываю пользовательскую форму и использую задание # в одной из ячеек в качестве ссылки для работы. При выходе из пользовательской формы я хочу оставить пользователя с той же активированной ячейкой. Кажется достаточно простым. Используя событие DblClick в любом месте, кроме столбца Job #, оно работает отлично, но если я нажал DBLCLICK на ячейку, к которой я хотел вернуться, я получаю предупреждение о защите.

Для дублирования:

В стандартном модуле

 Public ActRow As Long
  

Событие открытия

 Private Sub Workbook_Open()
Sheets("Sheet1").Protect userinterfaceonly:=True
End Sub
  

Код пользовательской формы:

 Private Sub CommandButton1_Click()
    Unload Me
    ' Doesn't matter whether the Unload is before or after
    Range("B" amp; ActRow).Activate
End Sub
  

Код листа 1:

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ActRow = ActiveCell.Row
    UserForm1.Show
End Sub
  

С помощью приведенного выше кода, если я дважды щелкну в любом месте, кроме столбца «B» на листе 1, пользовательская форма откроется только с помощью CommandButton1. Если я нажму кнопку, я вернусь к листу 1 с выбранной ячейкой в столбце «B» исходной строки. Нет предупреждающих сообщений.
Однако, если я дважды щелкнул ячейку в столбце «B», когда я нажимаю кнопку, я возвращаюсь на Лист1, и моя исходная ячейка активируется, но я получаю предупреждающее сообщение «Защищенный лист». Почему?
Приложение.DisplayAlerts не лечит это и не открывает ячейку заранее.
Мне остается активировать строку ниже, а затем переместить строку вверх, чтобы устранить предупреждающее сообщение, но это просто маскирует проблему.

Есть идеи? Спасибо, Джон

Ответ №1:

Если вы запустите свой код без защиты листа, вы увидите, что двойной щелчок по ячейке в столбце B запустит редактирование в этой ячейке. При защищенном листе редактирование запрещено, отсюда и ошибка.

Чтобы избежать этого, обновите свой код следующим образом

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    ActRow = ActiveCell.Row
    UserForm1.Show
End Sub