Как сделать лист очень скрытым
Иногда возникают ситуации, когда надо скрыть лист со всем его содержимым от посторонних любопытных глаз. Очень часто это делается из контекстного меню листа (для счастливых обладателей 2007 Excel. Подробнее: здесь). Но при использовании данного метода необходимо защитить книгу, иначе отобразить скрытые листы сможет каждый (тем же правым щелчком мыши - Отобразить). А что делать, если книгу не надо защищать? Ведь часто необходимо оставить пользователям возможность работы со структурой книги, например, добавлять листы. Как тогда скрыть лист так, чтобы его нельзя было отобразить? Есть достаточно простой способ через редактор VBA, при этом обладать навыком программирования вообще не нужно. Итак, определились какой лист надо скрыть. Далее:
- заходим в редактор VBA(
Alt +F11 ) - жмем сочетание клавиш
Ctrl +R или идем в меню View -Project Explorer (чтобы отобразить окно объектов проекта VBA) - жмем
F4 или через View -Properties Window (чтобы отобразить окно свойств) - в левой части окна (в Project Explorer) ищем книгу, лист в которой надо скрыть и раскрываем её папку(на скрине это VBA Project (Книга1))
- раскрываем папку Microsoft Excel Objects и выделяем там лист с нужным именем
- в Окне свойств (Properties Window) находим свойство Visible и назначаем ему значение xlSheetVeryHidden
Чтобы затем отобразить этот лист необходимо свойству Visible задать значение - xlSheetVisible. При этом для отображения листа необходимо будет обязательно зайти в редактор VBA - простым методом отобразить не получится. И книгу защищать не надо. Что нам и было необходимо.
Для большей надежности можно защитить проект VBA, чтобы не было возможности отобразить лист из VBA, не указав пароль. На функционал это не повлияет совершенно.
В том же окне VBA(
- Tools -VBAProject Properties -вкладка Protection
- для защиты устанавливается галочка "Lock project for viewing"; для разблокировки - снимается
- вписывается/удаляется сам пароль в полях Password и Confirm password.
Скрыть только определенные листы активной книги можно следующим кодом:
Sub Hide_Sheets() Dim ws, aSheets aSheets = Array("Лист1", "Списки", "Лист2") 'через запятую перечисляем листы для скрытия(обязательно в кавычках) For Each ws In aSheets ActiveWorkbook.Sheets(ws).Visible = xlSheetVeryHidden 'отобразить – xlSheetVisible; сделать лист просто скрытым - xlSheetHidden Next wsSh End Sub |
Скрыть все листы в активной книге, кроме листа с именем "Видимый", можно следующим кодом:
Sub Hide_All_Sheets() Dim wsSh As Object For Each wsSh In ActiveWorkbook.Sheets If wsSh.Name <> "Видимый" Then wsSh.Visible = xlSheetVeryHidden 'отобразить – xlSheetVisible; сделать лист просто скрытым - xlSheetHidden Next wsSh End Sub |
Скрыть абсолютно все листы не получится - Excel не позволит это сделать, т.к. в книге должен быть видимым хотя бы один лист.
Также см.:
Как сделать лист скрытым?
Изменить видимость листов
Почему нет листов?
Статья помогла? Сделай твит, поделись ссылкой с друзьями!
Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум
Доброго дня всем! Всё вроде получилось, но почему-то в первом окне файла НЕ отразились у меня страницы, в на втором окне файла, все листы отражаются, странно! В чём фокус-не поняла. Спасибо за внимание.
toma, скорее всего дело в этом:Почему нет листов?
Добрый день. Можно ли средствами vba cкрыть программно все листы ,а отобразить на форме при помощи :optionbutton
Юрий, все не получится - хотя бы один лист должен быть видимым. Как скрыть программно - в статье приведен код.
Можно скрыть книгу:
Workbooks("Имя книги.xls").Windows(1).Visible = false
Если Вам "мешает" видимый лист, поместите на него инструкцию или аннотацию к Вашей разработке. Все будут довольны.
Вопрос такой: можно ли изменять данные в скрытом и запароленном листе, или для этого его нужно обязательно открыть?
Прочитайте статью:http://www.excel-vba.ru/chto-umeet-excel/kak-obratitsya-k-diapazonu-iz-vba/
К листу можно обращаться и без его активации или отобржения. И так же снять защиту.
Здорово!
Долго искал в тексте кода, какой же командой проверяется включены макросы или нет)) Не сразу сообразил, что если макросы выключены, то код, делающий листы видимыми, просто не сработает! А листы будут всегда скрытыми, т.к. мы закрываем книгу еще при работающих макросах, и, как следствие, Workbook_BeforeClose - отработает и скроет листы.
Красиво и остроумно.
Прошу пояснить:
Application.ScreenUpdating = False - без включения обновления экрана в конце макроса - это имеет какую-то причину?
If Without End If - почему не выдает ошибку?
Дмитрий,добрый день!
Такой вопрос: как в последнем примере включить ограничение для каждого пользователя по вводу данных в определённых ячейках на указанных листах?!
Добрый день, Роман. Не понял какое отношение это вообще имеет к данной статье. Здесь описывается как скрыть листы, а не как ограничить ввод данных. Поэтому непонятно про какой последний пример вообще речь - в этой статье он единственный :)
Как разрешить изменять только выбранные ячейки?
Каждому пользователю свой лист/диапазон
Вам, скорее, другие статьи нужны:
Параметры VBAProject Properties\Lock project for viewing не сохраняются в файле формата .XLSX. Другими словами: пока в файле нет макросов у меня не получилось поставить пароль на Lock project for viewing.
Добрый день.
Подскажите пжлста, как данный скрипт поправить, чтоб отслеживать изменения только в двух столбцах?
Спасибо
Евгений, а скрипт из этой статьи вообще ничего не отслеживает. Вы вообще там комментарий разместили? Комментарий добавили к статье "Как сделать лист скрытым".