Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение "Обработано". Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих "обработанную" ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек - нет.
Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение "Обработано", должен сработать макрос, который:
1. Снимает защиту листа 2. Ставит галочку "защищаемая ячейка" на всех ячейках этой строки 3. Включает защиту листа
Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.
Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки - в идеале хотелось бы сделать именно так. Ячейка получает значение "Обработано", а затем вся эта строка становится защищенной.
Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение "Обработано". Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих "обработанную" ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек - нет.
Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение "Обработано", должен сработать макрос, который:
1. Снимает защиту листа 2. Ставит галочку "защищаемая ячейка" на всех ячейках этой строки 3. Включает защиту листа
Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.
Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки - в идеале хотелось бы сделать именно так. Ячейка получает значение "Обработано", а затем вся эта строка становится защищенной.
Для метода Protect можете использовать аргумент AllowFiltering. В макросе Ikki это будет выглядеть так:
[vba]
Код
Private Sub Worksheet_Calculate() Me.Unprotect For i = 3 To Cells(Rows.Count, "c").End(xlUp).Row ' 3 - потому что пропускаем шапку таблицы If Cells(i, 3) = "Обработано" Then Cells(i, 1).Resize(, 4).Locked = True Next Me.Protect AllowFiltering:=True End Sub
[/vba]
operkote, здравствуйте.
Для метода Protect можете использовать аргумент AllowFiltering. В макросе Ikki это будет выглядеть так:
[vba]
Код
Private Sub Worksheet_Calculate() Me.Unprotect For i = 3 To Cells(Rows.Count, "c").End(xlUp).Row ' 3 - потому что пропускаем шапку таблицы If Cells(i, 3) = "Обработано" Then Cells(i, 1).Resize(, 4).Locked = True Next Me.Protect AllowFiltering:=True End Sub