Страницы: 1
RSS
Защита ячейки в зависимости от значения другой ячейки
 
Всем доброго времени суток.

Есть проблемка. Необходимо защитить ячейку от изменений в зависимости от данных в контрольной ячейке. В VBA не силён, написал такой код:

[code]
Private Sub Worksheet_Change(ByVal Target As Range)
   
   If ActiveCell.Value = "Да" Then
       ActiveCell.Offset(0, -4).Locked = True
   ElseIf ActiveCell.Value = "Нет" Then
       ActiveCell.Offset(0, -4).Locked = False
   End If
   
End Sub
[/code]

Пока защита листа не включена, всё работает, галочка защиты ячейки ставится и снимается. Но как только я ставлю защиту листа (защита без пароля) при смене значения в контрольной ячейке вылетает ошибка: Run-time error '1004' Нельзя установить свойство Locked класса Range. Что я делаю не так?
Есть мысль что перед изменением защиты ячейки надо программно снять защиту листа и потом программно его вернуть. В какую сторону копать? Предложение учить c нуля  VBA не принимаются :)    
 
снимите защиту листа
смените статус ячейки
верните защиту листа
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Column = 5 Then 'Optional
            If .Cells.Count = 1 Then
                If .Value = "Да" Then
                    ActiveSheet.Unprotect
                    .Offset(0, -4).Locked = True
                    ActiveSheet.Protect
                ElseIf .Value = "Нет" Then
                    ActiveSheet.Unprotect
                    .Offset(0, -4).Locked = False
                    ActiveSheet.Protect
                End If
            End If
        End If
    End With
End Sub
 
МатросНаЗебре, Спасибо, добавил ActiveSheet.Unprotect и Protect и заработало. Не понял зачем у вас в коде подсчёт ячеек и столбцов, к себе не добавлял работает и так.  
 
Цитата
написал:
зачем у вас в коде подсчёт ячеек
Выделите две ячейки и удалите, появится ответ.

А столбец проверяется, на случай, если внесете Да или Нет в какой-то другой столбец. Но эта проверка необязательна, о чём в коде есть пометка "Optional".
 
МатросНаЗебре, Да / Нет у меня идут выпадающим списком в одном столбце, так что мне не критичны эти проверки, просто хотел сделать защиту от случайного удаления введенных данных.
Страницы: 1
Наверх