Суперскрытый лист

140770 21.10.2012 Скачать пример

Иногда некоторые листы в книге приходится скрывать от глаз пользователей. Классический способ предполагает скрытие листа через меню Формат - Лист - Скрыть или правой кнопкой по ярлычку листа - Скрыть (Hide):

very_hidden_sheet3.png

Проблема в том, что пользователь, зайдя в меню Формат - Лист - Отобразить или щелкнув правой кнопкой мыши по ярлычку любого листа и выбрав Показать (Unhide), будет видеть имена скрытых листов и понимать, что часть информации от него скрыта:

very_hidden_sheet4.png

Поэтому лучше сделать так, чтобы пользователь и не догадывался о присутствии в книге каких-то скрытых листов. Для этого открываем редактор Visual Basic:

  • в Excel 2003 и старше - выбрав в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor)
  • в Excel 2007 и новее - нажав на кнопку Редактор Visual Basic (Visual Basic Editor) на вкладке Разработчик (Developer) или нажав ALT+F11 

Ищем на экране вот такое окно:

very_hidden_sheet1.gif

Если его не видно, то можно его отобразить через меню View - Project Explorer (верхняя часть) и View - Properties Window (нижняя часть).

В верхней части на "дереве" находим и выделяем наш лист (на картинке - Лист1), а в нижней части находим свойство Visible (в конце списка) и делаем его xlSheetVeryHidden.

very_hidden_sheet2.gif

Вуаля! Теперь увидеть этот лист и узнать о его существовании можно только в редакторе Visual Basic и ни в каких окнах и менюшках Excel он отображаться не будет. Меньше знаешь - крепче спишь. :)

Ссылки по теме



Volna
21.10.2012 13:55:05
Лист я спрятала, но теперь макрос, который его использует его не видит. Подскажите, пожалуйста, что нужно написать, чтобы макрос нашел спрятанный лист?
squadra
21.10.2012 13:55:37
Sheets("List").Visible = -1
текст макроса
Sheets("list").Visible = 2
т.е. мы сначала показываем лист, потом его прячем.....
Александр
21.10.2012 13:56:30
Добрый день!
Возможно не нашел..
Иногда макрос скрывает листы.... потом чтобы отобразить нужно делать много лишних телодвижений (формат-лист-отобразить) и так раз 20 подряд....
можно это как то упростить?.
Александр
21.10.2012 13:57:09
Вот макрос, который открывает все скрытые листы в книге (кроме скрытых методом VeryHidden)
 Sub UnHideAllSheets()
 Dim x As Integer
 x = 0
 MsgBox ("В Книге всего " + Str(Application.ActiveWorkbook.Sheets.Count) + " листа(ов)")
 For Each sh In ActiveWorkbook.Worksheets
 If sh.Visible = False Then x = x + 1
 If sh.Visible = False Then sh.Visible = True
 Next
 If x = 0 Then MsgBox ("Похоже, в книге нет скрытых листов, прочь параною!")
 If x > 0 Then MsgBox ("Открыто " + Str(x) + " скрытых листа(ов)")
 End Sub
user
21.10.2012 13:57:50
Алекс, спасибо огромное!! очень полезная вещь =)
Orxan
21.10.2012 13:58:38
Спасибо, что все это бесплатно.
Немного дополненный макрос от Александра, должен показать все скрытые листы.

Sub UnHideAllSheets()
 Dim x As Integer
 Dim sh As Worksheet
 x = 0
 MsgBox ("В Книге всего " + CStr(Application.ActiveWorkbook.Sheets.Count) + " листа(ов)")
 For Each sh In ActiveWorkbook.Worksheets
    If sh.Visible = False Then x = x + 1
    If sh.Visible = xlSheetVeryHidden Or _
      sh.Visible = xlSheetHidden Then
     x = x + 1
     sh.Visible = xlSheetVisible
    End If
 Next
 If x = 0 Then MsgBox ("Похоже, в книге нет скрытых листов, прочь параною!")
 If x > 0 Then MsgBox ("Открыто " + CStr(x) + " скрытых листа(ов)")
End Sub
27.03.2017 12:59:32
Народ, а каким образом можно снова его открыть?
08.11.2017 01:05:22
Действительно, интересует вопрос как открыть спрятанный лист снова. Выше представленные макросы показывают, что есть спрятаный лист, и я знаю какой это лист. Но как его снова открыть? Через View - Properties Window этого не сделаешь и  Формат - Лист - Отобразить тоже не подходит.
08.11.2017 01:11:03
Как скрыли, так и верните обратно.
Открыть редактор Visual Basic (Alt+F11), выделить суперскрытый лист в панели Project Explorer (там всегда видны все листы) и потом в панели Properties поменять ему свойство Visible обратно на xlSheetVisible.
08.11.2017 01:26:13
Пишет, что нельзя установить свойство Visible класса Worksheet. Защита с листа и книги снята.
08.11.2017 09:29:29
Странно. Светлана, если возможно прислать файл мне на почту для вивисекции - посмотрю.
08.11.2017 09:35:42
Хорошо, я Вам перешлю - самой интересно или я чего не понимаю, или действительно есть проблема.
26.11.2017 22:49:08
Столкнулся с тем, что суперскрытый лист отображается в окне Сведения о книге в разделе Защита книги. Там отображаются все защищенные листы, в том числе и суперскрытые, если на них поставлен пароль. Вывод - на суперскрытый лист пароль не ставим.
Добрый день!
Можно ли сделать суперскрытыми часть листов, без перечисления всех нужных и присвоения атрибута каждому по отдельности?
Например, только те, которые имеют диапазон (Name) от Sheet22 до Sheet33?

Спасибо!
24.12.2017 18:57:00
У меня тоже пишет, что нельзя установить свойство Visible класса Worksheet. Какое решение?
17.12.2018 17:48:06
Добрый вечер. Помогите пожалуйста допилить код. Проблема в том, что после того как срабатывает макрос и открывается копированный лист "Форма заказа для клиента",  не получается скрыть обратно лист в первоначальном файле. А нужно чтобы скрытый оставался скрытым, но в таком случае макрос на файле перестает работать. В целом все работает, кроме этого момента.
Sub Печать_Кнопка1_Щелчок()
On Error Resume Next
Sheets("Форма заказа для клиента").Visible = 1
    Const REPORTS_FOLDER = "Заказы\Для клиентов"
       MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
    ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
    Filename = Application.GetSaveAsFilename("Расчет для клиента Заказ № .xls", "Книга Excel(*.xls),", , _
                                             "Введите имя файла для сохраняемого отчёта", "Сохранить")
    If VarType(Filename) = vbBoolean Then Exit Sub
    Err.Clear: Worksheets("Форма заказа для клиента").Copy: DoEvents
    If Err Then Exit Sub
     If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
          ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
         Application.DisplayAlerts = False
Sheets("Форма заказа для клиента").Visible = 2
End If
End Sub
 
Наверх