Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Разрешить скрывать/отображать структуры на защищенном листе
 
Не выходит разрешить скрывать/отображать структуры на защищенном листе, пишу такой код:    
Код
Newwb.Worksheets("Лист1").EnableOutlining = True
    Newwb.Worksheets("Лист1").Protect Password:="0000", Contents:=True, Scenarios:=True, DrawingObjects:=True, AllowSorting:=True, UserInterfaceOnly:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True
 
О каких структурах речь? Для защиты структуры КНИГИ
Код
ActiveWorkbook.Protect Structure:=True
Согласие есть продукт при полном непротивлении сторон.
 
Sanja,Структурирование (группировка) данных на листе.

Необходимо защитить лист, но разрешить использовать уже готовые группировки.  
 
Цитата
BladzheR написал:
пишу такой код
и сразу после его выполнения структура не работает? Или работает до закрытия книги?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, до закрытия не знаю, я через vba копирую лист2 в новую книгу...

Код
Worksheets("Лист2").Select
Worksheets("Лист2").Copy    
Set Newwb = ActiveWorkbook

........

Newwb.Worksheets("Лист1").EnableOutlining = True
Newwb.Worksheets("Лист1").Protect Password:="0000", Contents:=True, Scenarios:=True, DrawingObjects:=True, AllowSorting:=True, UserInterfaceOnly:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True

Newwb.SaveAs ...
Newwb.Close


После открываю новый созданный файл и группировка не работает. Нажимаю кнопку "Скрыть группу" и выдаёт ошибку:  "Нельзя использовать данную команду на защищённом листе...."
Изменено: BladzheR - 11 Ноя 2017 18:31:23
 
Тогда все ясно. Дело в том, что данный метод работает только до закрытия книги. Это означает, что код установки защиты необходимо устанавливать каждый раз при открытии книги. Лучше всего поместить код в событие Workbook_Open модуля книги(ЭтаКнига).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Понял, спасибо, сейчас попробую...
 
Код
Private Sub Workbook_Open()
   ' Кнопки структуры будут работать, если...
   sht.EnableOutlining = True  '<-- Подставьте ссылку на нужный лист

   sht.Protect DrawingObjects:=False, Contents:=True, UserInterfaceOnly:=True _
     , AllowFormattingCells:=True, AllowFormattingRows:=True
   sht.EnableSelection = xlNoRestrictions  'xlUnlockedCells
End Sub
Изменено: eeigor - 27 Янв 2018 19:51:11
 
Добрый день всем!
Знатоки, подскажите, пожалуйста, как должен выглядеть код от eeigor, с уже подставленной ссылкой на нужный лист? Например, если лист называется "Тест".
Нужно, чтобы при открытии книги можно было на защищенном листе сворачивать-разворачивать группировки.
 
в начале
Set Sht= Worksheets("Тест")
остальное без изменений
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спасибо.
Другой вариант:
Код
Private Sub Workbook_Open()
Sheets("Прайс1").Unprotect Password:="1" 'Снимаем защиту листа
Sheets("Прайс1").EnableOutlining = True '
Sheets("Прайс1").Protect Contents:=True, UserInterfaceOnly:=True

Sheets("Прайс2").Unprotect Password:="1" 'Снимаем защиту листа
Sheets("Прайс2").EnableOutlining = True '
Sheets("Прайс2").Protect Contents:=True, UserInterfaceOnly:=True
End Sub
Да, группировки заработают.
Но во всех вариантах (в том числе и других), которые я видел, с таких листов пользователь сможет снять защиту листа БЕЗ ВВОДА ПАРОЛЯ.
А есть варианты, при которых и кнопки группировок работали бы и при этом
1) при попытке пользователя снять защиту с листа сохранялась необходимость ввода пароля,
2) при открытии книги не нужно было бы вводить пароль защиты листа.
?
Изменено: maseur - 16 Окт 2019 11:55:45
 
Код
Sheets("Прайс2").Unprotect Password:="1" 'Снимаем защиту листа
здесь Вы пароль указываете. А почему Вы его не указываете при установке защиты? Ведь это делается так же:
Код
Sheets("Прайс2").Protect Password:="1", Contents:=True, UserInterfaceOnly:=True
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ок, Дмитрий. Спасибо большое.
Изменено: maseur - 16 Окт 2019 14:49:14
Страницы: 1
Читают тему (гостей: 1)
Наверх