#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