Страницы: 1
RSS
Заблокировать диапазоны от любых изменений и наложить пароль, vba
 
Добрый день! Подсобите пожалуйста кодом который может заблокировать диапазоны от любых изменений. И наложить пароль, например, "aa12345". Диапазоны разные, например, C3:C21 и E3:F23.
 
Добрый день. Макрорекордер.
Код
Sub Блок()
  Application.ScreenUpdating = False
    Cells.Select
    Selection.Locked = False
    Selection.FormulaHidden = False
    Range("B3:B21,D3:D21").Select
    Selection.Locked = True
    Selection.FormulaHidden = True
     ActiveSheet.Protect Password:="aa12345", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
     Application.ScreenUpdating = True
End Sub
Изменено: amfor - 24.08.2020 14:06:42
 
amfor, спасибо! Работает.
А почему лист с заблокированными диапазонами можно удалить?
Ожидал что потребует пароль для удаления листа.
 
Цитата
Михаил Л написал:
кодом который может заблокировать диапазоны от любых изменений

Поставить

Код
Sub Блок()
  Application.ScreenUpdating = False
    Cells.Select
    Selection.Locked = False
    Selection.FormulaHidden = False
    Range("B3:B21,D3:D21").Select
    Selection.Locked = True
    Selection.FormulaHidden = True
     ActiveSheet.Protect Password:="aa12345", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
     ActiveWorkbook.Protect Password:="aa12345", Structure:=True, Windows:=False
     Application.ScreenUpdating = True
End Sub

Изменено: amfor - 24.08.2020 14:33:33
 
amfor, спасибо
я извиняюсь, но защиту с листов как снять?
 
Вариант 1: меню Главное - Формат - Снять защиту листа
Вариант 2: Правой клавишей мыши по ярлычку листа (это там где написано Лист1) - Снять защиту листа
 
New, а листы как удалять после работы последнего предложенного макроса?
 
Рецензирование / Защитить книгу
Владимир
 
sokol92, спасибо. Нашел Рецензирование

Еще бы хотел узнать такой момент: при разблокировке диапазонов эти диапазоны считаются занятыми и размер файла увеличивается очень серьезно (чуть ли не в сотню раз от первоначального размера). С этим что нибудь можно сделать?
Или вариант только выделять диапазоны вокруг значений, выпадающих списков и формул и clear - ить их
 
Цитата
Михаил Л написал:
при разблокировке диапазонов эти диапазоны считаются занятыми и размер файла увеличивается очень серьезно
Если возможно, приведите пример файла - я не сталкивался с таким эффектом.
Обычная схема - все ячейки листа являются защищаемыми (по умолчанию). Мы снимаем этот признак только с тех ячеек, которые собираемся редактировать. Далее выставляем зашиту листа.
Изменено: sokol92 - 27.08.2020 19:28:29
Владимир
 
sokol92, вот пример. Все данные убрал (в основном формулы и выпадающие списки и пара таблиц).
Открыть оба файла и при активном файле Пример,  нажав ALT+F8, запустить макрос Поставить_Блок_ПЕРВЫЙ.
Сохранить файл. После тем же способом запустить второй макрос и размер файла уже не изменится
Ps. Юрий М, поправил)
Изменено: Михаил Л - 27.08.2020 21:26:45
 
Михаил Л, ну вот зачем здесь цитата?
 
Критично вырастают в объемах два листа: "_" и "Тур_Факт".
Вы выставляете для диапазона "A1:AL100000" значение свойства Locked=True, для остальных ячеек листа (а их много больше) значение Locked=False.
Лист защищается с параметром UserInterfaceOnly:=True, так что на выполнение макросов Ваши действия не влияют. Excel при сохранении вынужден запоминать все "нестандартные" ячейки, поэтому размер файла резко растет.

Вам действительно необходимо, чтобы пользователям после защиты листа было запрещено редактировать ячейки в диапазоне A1:AL100000 и разрешено редактировать остальные ячейки?
Изменено: sokol92 - 27.08.2020 20:23:54
Владимир
 
Выполните свои действа, а после запустите макрос
Код
Sub qq()
    For Each sh In ActiveWorkbook.Sheets
        Debug.Print sh.Name & " \ " & sh.UsedRange.Address
    Next
End Sub

Полюбуйтесь на результат.
 
Цитата
sokol92 написал:
разрешено редактировать остальные ячейки
Нет, этого не нужно. Если лучше наложить запрет на весь лист, то мне это подходит. Только как это записать кодом?
RAN,  а что должно произойти? Запустил макрос и не увидел изменений. я знаю что юседрэндж равен ранее заблокированным.
Изменено: Михаил Л - 27.08.2020 21:18:01
 
Это как раз тот случай, когда нужно работать с полным столбцом
Код
     '4------------------------------
      With Sheets("Тур_Факт")
      '.Select
    .Cells.Locked = False
    .Cells.FormulaHidden = False
     
'     .Range("a1:al100000").Select
     .Range("a:al").Locked = True
     .Range("a:al").FormulaHidden = True
     .Protect Password:="aa12345", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
     End With

Сравните результат
 
RAN, результат просто сказка! Вообще отличный!
Спасибо большое!
Страницы: 1
Наверх