Страницы: 1
RSS
Запуск макроса при нахождении активной ячейки в указанном диапазоне (защита умной таблицы)
 
Имеется «умная таблица» (нужна именно она, т.к. столбцов гораздо больше; нужна работающая функция авторасширения). Файл прилагаю. Возможен ли макрос, который будет:
- отключать защиту листа (пароль 1234), если активная ячейка находится в диапазоне «ДиапРП» (лист «Учет РП», A3:A9),
- включать защиту листа (пароль 1234), если активная ячейка находится вне диапазона «ДиапРП» (лист «Учет РП», A3:A9).
Т.е. формулы в нужных столбцах умной таблицы будут защищены, а для расширения таблицы «вниз» пользователю будет достаточно сделать активной ячейку А10 (в данном примере), заполнить ее, и стандартным способом расширить «вниз» умную таблицу. Как только он переходт к другому столбцу – защита включается снова.
Вроде бы можно использовать «if intersect(activecell, ДиапРП) is nothing then …», но знаний не хватает.
Заранее спасибо.
 
Чуть подправить код и запихнуть в модуль ЛИСТА (не книги!!!)
Повесить на событие SELECTIO CHANGE, а не Worksheet_change (т.е. на событие изменения выделения, а не изменения на листе, т.к. изменение на листе не происходит при активации ячейки (значение ячейки не меняется)).
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("ДиапРП") 'диапазон с именем, имя - строка, значит - берем в кавычки

If Not Intersect(KeyCells, Target) Is Nothing Then 'не нужно Range(Target.Address). Просто Target

MsgBox "В дипазоне"

End If
End Sub
Кому решение нужно - тот пример и рисует.
 
Пытливый, спасибо за помощь!!!
В итоге получился по-моему неплохой способ защиты формул в "умной таблице" от кривых ручек, с применением стандартного способа защиты листа. По поиску в нете я его вроде не нашел, может кому пригодится.

Если активная ячейка находится в пределах указанного диапазона (у меня это ячейки в столбце А, начиная с 3-й, имя диапазона "ДиапазонРП"), то защита неактивна, и соответственно доступно стандартное автозаполнение "умной таблицы" вниз, удаление строк и пр.
Если же пользователь перешел на ячейки в иных столбцах (вне указанного в макросе диапазона) - то автоматически включается защита листа (с указанным в макросе паролем), при этом возможность редактирования пользователем данных в ячейках определяется установленному Вами заранее формату ячейки (защищаемая либо нет).
Т.е. предварительно перед включением макроса необходимо установить формат "защищаемая ячейка" только на тех столбцах/ячейках "умной таблицы", которые необходимо защитить от изменений (обычно формулы).

Макрос вставляется в модуль листа:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("ДиапазонРП") 'диапазон с именем, имя - строка, берем в кавычки
If Intersect(KeyCells, Target) Is Nothing Then 'если активная ячейка находится вне диапазона "ДиапазонРП", то...
ActiveSheet.Protect Password:="1234" 'включить защиту листа с паролем "1234"
Else 'Если нет, то...
ActiveSheet.Unprotect Password:="1234" 'отключить защиту листа с паролем "1234"
End If
End Sub
Изменено: ArtemiyK - 30.10.2015 09:38:47
 
ArtemiyK, защита не сработает, если выделю ячейки начиная с, например, A6 и, допустим, до F6, и нажму удалить, то макрос не защитит формулы. Проверяйте не пересечение разрешённого для редактирования диапазона с Target, а защищаемый.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Читают тему
Наверх