Доброго времени суток! Имеется приложение в Excel, некоторые ячейки которого хотелось бы защитить. Не столько скрыть формулы - сколько просто от случайного стирания. Что разумеется легко решается. Ничего нового - тема стара как мир и решается через Protect. На всех процедурах: Sub ... End Sub все прекрасно работает. Однако когда дело доходит до процедур изменения ячеек с последующими действиями исполнение кода завершается ошибкой. То есть при появлении завершающего присваивания пароля:
Код
Worksheets("List1").Protect Password:="555"
Процедура вылетает. Ошибка вида: Run Time Error '1004'
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Worksheets("List1").Unprotect Password:="555"
'много ячеек подверженных изменению
Set KeyCells = Range("B1")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
'необходимые действия
Set KeyCells = Range("B2")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
'необходимые действия
'и так далее
Worksheets("List1").Protect Password:="555"
End Sub
Может кто сталкивался с подобным и знает простое решение. По сути нужно защитить даже не лист а просто диапазон ячеек на листе. Формулы в этих ячейках тоже желательно все-таки скрыть. Заранее благодарен за советы и решения
К сожалению процедура по прежнему прерывается. Мест где пароль присваивается всего несколько. Пробовал отключать. Возможно, что пароль включается раньше завершения изменения ячеек. События меняются более чем в 30 ячейках за 1 раз. Идет присваивание ячейкам пользовательских значений. Однако пауза тоже не решила проблему:
Надо сказать что включение пароля вызывает ошибку именно в завершении этой процедуры
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Другие процедуры нормально реагируют на включение/отключение защиты. Файл выслать не могу - в нем конфиденциальная информация. Приложение работает с анкетами.