Макросы в excel для скрытого листа

В статье «Как скрыть /отобразить страницу в Excel» мы рассмотрели как вручную открыть/ скрыть лист книги, все то же самое можно сделать и написав простой VBA макрос:

Sub Макрос1 ()
ActiveWindow.SelectedSheets.Visible = False 'Прячем активный лист
Sheets ("Лист2").Visible = False 'Прячем лист с именем "Лист2", можно аналогично отобразить лист обращаясь к нему по имени, но с параметром 'true'
End Sub

Лист так же можно скрыть и вручную из редактора VBA. Зайдем в редактор (Alt+F11) и кликнув на соответствующий лист, в настройках в параметре Visible  выберем интересующий нас статус видимости листа, в том числе статус «VeryHidden», который позволит убрать лист из списка скрытых листов (список вызывается из самого документа Excel при клике правой кнопкой мыши по названию листа):

Очень скрыт

Лист совсем скрыт

Будем благодарны, если Вы нажмете +1 и/или Мне нравится внизу данной статьи или поделитесь с друзьями с помощью кнопок расположенных ниже.

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

Иногда некоторые листы в книге приходится скрывать от глаз пользователей. Классический способ предполагает скрытие листа через меню Формат — Лист — Скрыть или правой кнопкой по ярлычку листа — Скрыть (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 он отображаться не будет. Меньше знаешь — крепче спишь. :)

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

  • 4 уровня защиты в файлах Excel
  • Скрытие листов оптом с помощью надстройки PLEX

rustim86

0 / 0 / 0

Регистрация: 01.09.2015

Сообщений: 50

1

Скрытие/отображение рабочих листов макросом

22.01.2016, 09:26. Показов 22454. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем здравствуйте! Подскажите, пожалуйста, есть ли возможность реализовать в VBA скрытие/отображение листов по признаку закрытый лист сделать открытым, и наоборот. Или код приведенный ниже сделать как-то компактнее что ли, дабы не писать команду для каждого отдельного листа с его названием. Заранее благодарю.

Visual Basic
1
2
3
4
5
6
ThisWorkbook.Sheets("Лист1").Visible = xlSheetVisible
ThisWorkbook.Sheets("Лист2").Visible = xlSheetVisible
ThisWorkbook.Sheets("Лист3").Visible = xlSheetVisible
ThisWorkbook.Sheets("Лист4").Visible = xlSheetVisible
ThisWorkbook.Sheets("Лист5").Visible = xlVeryHidden
ThisWorkbook.Sheets("Лист6").Visible = xlVeryHidden



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

22.01.2016, 09:50

2

Цитата
Сообщение от rustim86
Посмотреть сообщение

закрытый лист сделать открытым, и наоборот

Можно, но надо позаботиться о том, чтобы в любой момент хотя бы один лист был видимым.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub rustim86()
Dim i&, c As New Collection
  For i = 1 To ThisWorkbook.Sheets.Count
    If ThisWorkbook.Sheets(i).Visible = xlSheetVisible Then
      c.Add i
    Else
      ThisWorkbook.Sheets(i).Visible = xlSheetVisible
    End If
  Next
  If c.Count = ThisWorkbook.Sheets.Count Then
    MsgBox "в книге нет скрытых листов - невозможно скрыть все листы"
    Exit Sub
  End If
  For i = 1 To c.Count
    ThisWorkbook.Sheets(c(i)).Visible = xlSheetVeryHidden
  Next
End Sub



1



Shersh

Заблокирован

22.01.2016, 09:52

3

Visual Basic
1
2
3
for each sh in ThisWorkbook.Sheets
if sh.Visible=-1then sh.Visible=2else sh.Visible=-1
next

однако хотя бы один лист в книге должен быть отображен, имейте ввиду.



1



0 / 0 / 0

Регистрация: 01.09.2015

Сообщений: 50

22.01.2016, 09:58

 [ТС]

4

Казанский, благодарю!

Добавлено через 1 минуту
Shersh, да-да, я знаю, опытным путем уже узнал это И вам спасибо!



0



0 / 0 / 0

Регистрация: 17.03.2023

Сообщений: 9

24.03.2023, 09:46

5

Здравствуйте, уважаемые форумчане!
Я не программист, просто пытаюсь облегчить себе работу в excel и ищу готовые коды. В другой теме уже спрашивал, но может не в той теме задаю вопрос, поэтому нет ответа или пока некогда ответить.

Спрошу в этой теме. Как при помощи снятии галочек в ечейке с помощью кода скрывать листы с таким же именем как и в строке таблицы, ну и соответственно при установке галочки лист снова отображается. Подскажите код для файла, который приложил



0



АЕ

ᴁ®

Эксперт MS Access

3070 / 1736 / 361

Регистрация: 13.12.2016

Сообщений: 5,938

Записей в блоге: 4

24.03.2023, 10:05

6

Цитата
Сообщение от Алик73
Посмотреть сообщение

В другой теме уже спрашивал, но может не в той теме задаю вопрос, поэтому нет ответа или пока некогда ответить.

Может пора создать свою тему?

Добавлено через 5 минут

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("E4:E100")) Is Nothing Then
        Target.Font.Name = "Marlett"
        If Target = "a" Then
            Target = ""
            ThisWorkbook.Sheets(Target.Offset(0, -1).Value).Visible = xlVeryHidden
        Else
            Target = "a"
            ThisWorkbook.Sheets(Target.Offset(0, -1).Value).Visible = xlSheetVisible
        End If
        Target.Offset(0, 1).Activate
    End If
End Sub

Добавлено через 4 минуты
однако надо или

Visual Basic
1
On Error Resume Next

вставить, либо Range(«E4:E8») ограничить…



1



0 / 0 / 0

Регистрация: 17.03.2023

Сообщений: 9

24.03.2023, 11:00

7

АЕ, спасибо!

Просто, когда создаешь свою тему, делают замечание зачем плодить темы, если они уже есть. Задаю вопрос в теме к которой он относится.

Помогите еще, пожалуйста, что надо добавить в этот код, чтобы по снятию/установке галочки скрывались/показывались строки, с 1 по 5 например, на необходимом листе. Заранее благодарю!



0



ᴁ®

Эксперт MS Access

3070 / 1736 / 361

Регистрация: 13.12.2016

Сообщений: 5,938

Записей в блоге: 4

24.03.2023, 11:30

8

Цитата
Сообщение от Алик73
Посмотреть сообщение

Помогите еще, пожалуйста,

Поэтому и говорю. Создайте тему. Я же вижу, что ваша хотелка бесконечна и однообразна до безобразия.



0



0 / 0 / 0

Регистрация: 17.03.2023

Сообщений: 9

24.03.2023, 11:51

9

АЕ, пока вопрос не снят, поэтому и однообразен.
Хорошо, спасибо.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

24.03.2023, 11:51

Помогаю со студенческими работами здесь

Разделение списка расчетных листов на листы или файлы PDF макросом
Доброго дня, форумчане! Есть такой вопрос — есть файл Excel, выгруженный из 1С, со списком…

Сбор рабочих листов из внешних файлов с последующим выполнением другого макроса
Использую прекрасный макрос с форума,-спасибо. Макрос умеет открывать много файлов "в один" — одну…

Объекты Excel VBA: рабочие листы. Примеры структур рабочих листов в приложении, их связь и изменчивость
Ребята,помогите найти информацию…ума не приложу,что нужно искать…
7. Объекты Excel VBA:…

Скрытие и отображение столбцов
Возникла такая задачка:
Есть 3 вида стоблбцов, которые чередуются (1-й вид, 2-вид, 3-й вид, 1-й…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

Хитрости »

Как сделать лист очень скрытым

1 Май 2011              90276 просмотров

Иногда возникают ситуации, когда надо скрыть лист со всем его содержимым от посторонних любопытных глаз. Очень часто это делается из контекстного меню листа (для счастливых обладателей 2007 Excel. Подробнее: здесь). Но при использовании данного метода необходимо защитить книгу, иначе отобразить скрытые листы сможет каждый (тем же правым щелчком мыши — Отобразить). А что делать, если книгу не надо защищать? Ведь часто необходимо оставить пользователям возможность работы со структурой книги, например, добавлять листы. Как тогда скрыть лист так, чтобы его нельзя было отобразить? Есть достаточно простой способ через редактор VBA, при этом обладать навыком программирования вообще не нужно. Итак, определились какой лист надо скрыть. Далее:

  1. заходим в редактор VBA(Alt+F11)
  2. жмем сочетание клавиш Ctrl+R или идем в меню ViewProject Explorer (чтобы отобразить окно объектов проекта VBA)
  3. жмем F4 или через ViewProperties Window (чтобы отобразить окно свойств)
  4. в левой части окна (в Project Explorer) ищем книгу, лист в которой надо скрыть и раскрываем её папку(на скрине это VBA Project (Книга1))
  5. раскрываем папку Microsoft Excel Objects и выделяем там лист с нужным именем
  6. в Окне свойств (Properties Window) находим свойство Visible и назначаем ему значение xlSheetVeryHidden

Сделать лист супер скрытым

Чтобы затем отобразить этот лист необходимо свойству Visible задать значение — xlSheetVisible. При этом для отображения листа необходимо будет обязательно зайти в редактор VBA — простым методом отобразить не получится. И книгу защищать не надо. Что нам и было необходимо.
Для большей надежности можно защитить проект VBA, чтобы не было возможности отобразить лист из VBA, не указав пароль. На функционал это не повлияет совершенно.
В том же окне VBA(Alt+F11):

  1. ToolsVBAProject Properties -вкладка Protection
  2. для защиты устанавливается галочка «Lock project for viewing«; для разблокировки — снимается
  3. вписывается/удаляется сам пароль в полях 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

Как использовать: Для начала надо убедиться, что разрешены макросы и при необходимости включить их: почему не работает макрос. Затем копируем код выше, из Excel переходим в редактор VBA(Alt+F11) —InsertModule. Вставляем туда скопированный код. Теперь код можно вызывать нажатием клавиш Alt+F8 -выделяем Hide_SheetsВыполнить(Run).
Скрыть все листы в активной книге, кроме листа с именем «Видимый», можно следующим кодом:

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 не позволит это сделать, т.к. в книге должен быть видимым хотя бы один лист.

Также см.:
Как сделать лист скрытым?
Изменить видимость листов
Почему нет листов?


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Содержание

  1. Постановка задачи
  2. Переименование листов
  3. Как скрыть лист в Excel?
  4. Группировка
  5. Как сделать очень скрытый лист в Excel?
  6. Через надстройку VBA-Excel
  7. Скрыть строки вручную
  8. Как показать скрытый лист в Excel?
  9. С помощью свойства листов в редакторе кода
  10. Скрываем листы
  11. Скрываем рабочую книгу полностью
  12. Полезный Лайфхак в Excel
  13. Скрытие и отображение окон книг на панели задач Windows
  14. Как найти все скрытые строки на листе Excel с помощью макроса
  15. Скрыть столбцы используя сортировку
  16. Таблица в верхнем левом углу
  17. Скрытие и отображение листов
  18. Описание работы
  19. Автоматическое скрытие с использованием надстройки

Постановка задачи

Предположим, что у нас имеется вот такая таблица, с которой приходится “танцевать” каждый день:

Кому таблица покажется маленькой – мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов.

Задача – временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е.,

  • скрывать подробности по месяцам, оставляя только кварталы
  • скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
  • скрывать ненужные в данный момент города (я работаю в Москве – зачем мне видеть Питер?) и т.д.

В реальной жизни примеров таких таблиц – море.

Переименование листов

В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

expression.Name

где expression – переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

Допустим, у нас есть лист с уникальным именем (Name) – Лист1, индексом – 1 и именем Name – МойЛист, которое необходимо заменить на имя – Реестр.

Лист1.Name = “Реестр”

Worksheets(1).Name = “Реестр”

Worksheets(“МойЛист”).Name = “Реестр”

Процедура скрытия листа достаточно простая — в нижней панели щелкаем правой кнопкой мыши по названию листа, который хотим сделать невидимым, и в выпадающем меню выбираем команду Скрыть:

Если нужно спрятать сразу несколько листов, то удерживая клавишу Ctrl выделяем нужные листы с помощью мышки и повторяем вышеописанные действия (щелкаем правой кнопкой мыши по любому из выделенных листов и далее нажимаем Скрыть).

Группировка

Если выделить несколько строк или столбцов, а затем выбрать в меню Данные – Группа и структура – Группировать (Data – Group and Outline – Group), то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):

Более удобный и быстрый способ – использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.

Такой способ скрытия ненужных данных гораздо удобнее – можно нажимать либо на кнопку со знаком “+” или ““, либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа – тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.

Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением – через меню Данные – Группа и структура – Создать структуру (Data – Group and Outline – Create Outline). К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.

В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline):

Как сделать очень скрытый лист в Excel?

Параметры отображения любого листа в Excel мы можем настроить посредством Visual Basic. Переходим в редактор Visual Basic (на панели вкладок выбираем Разработчик -> Код -> Visual Basic или воспользуемся комбинацией клавиш Alt + F11):

В левой верхней части окна в списке выбираем нужный нам лист и чуть ниже подробно смотрим в блок с настройками (если он изначально не отображается, то уже в панели вкладок Visual Basic выбираем View -> Properties Window и блок появится).

За отображение листа в параметрах отвечает свойство Visible и как мы видим всего есть 3 варианта:

  • xlSheetVisible. Лист открыт и отображается во вкладках;
  • xlSheetHidden. Лист скрыт, но отображается в списке невидимых листов;
  • xlSheetVeryHidden. Лист скрыт и нигде не отображается.

Таким образом, чтобы скрыть лист средствами Visual Basic указываем значение параметра xlSheetHidden, а чтобы показать устанавливаем xlSheetVisible.

Из названия последнего значения xlSheetVeryHidden и взялся термин очень скрытого листа, но в принципе также часто можно встретить употребление выражение супер скрытого. При этом, что очень важно, установить значение параметра xlSheetVeryHidden можно только через Visual Basic, что и не позволяет обычному пользователю обнаружить очень скрытые листы стандартным способом.

Вернемся к нашему примеру.

Так как мы в начале скрывали Лист1, то для него установлена видимость xlSheetHidden, а нас сейчас интересует как раз 3 вариант. Выбираем его и теперь в списке скрытых листов пусто (кнопка в данном случае не активна, хотя мы знаем, что очень скрытые листы в книге на самом деле есть):

Теперь пользователь не увидит такой супер скрытый лист в интерфейсе Excel, однако он все же сможет его обнаружить если зайдет в редактор Visual Basic.

Если же стоит задача найти такие листы и отобразить их, то повторяем аналогичные действия и в Visual Basic для подобных листов устанавливаем параметр xlSheetVisible, после чего все листы станут видимыми.

Через надстройку VBA-Excel

Самый удобный способ, который не требует специальных знаний, а также позволяет быстро скрыть большое количество листов – установить надстройку VBA-Excel. Для того, чтобы скрыть или отобразить листы в Excel необходимо:

  1. Перейти на вкладку VBA-Excel (доступна после установки надстройки).
  2. В меню Диспетчеры выбрать пункт Диспетчер листов.
  3. В окне диспетчер выберите листы, видимость которых необходимо изменить и нажмите команду Видимость.​

Скрыть строки вручную

Простейший способ заключается в том, чтобы зрительно отыскать пустые строки и выделить их. При выделении нескольких строк нужно удерживать клавишу Ctrl на клавиатуре. После этого необходимо навести курсор на выделенное поле, кликнуть по нему правой кнопкой мыши и выбрать пункт “Скрыть” из контекстного меню. Выделенные строки будут скрыты. Способ простой, но имеет свои минусы, можно пропустить строку, можно ошибочно выделить не ту строку.

Как показать скрытый лист в Excel?

Чтобы открыть скрытый лист обратно мы также в нижней панели правой кнопкой мыши щелкаем по любому из листов и выбираем команду Показать. В появившемся окне можно посмотреть все невидимые листы книги (даже если он всего один) и выбрать какой именно лист необходимо вывести на экран:

Со скрытием и отображением листов разобрались, давайте перейдем к чуть более сложной задаче, а именно научимся скрывать лист так, чтобы обычный пользователь не смог его отобразить.

С помощью свойства листов в редакторе кода

Для того чтобы скрыть лист необходимо:

  1. Открыть редактор кода сочетанием клавиш Alt+F11.
  2. В левом меню раскройте проект с одноименным названием вашей книги.
  3. Найдите в списке объектов лист, который необходимо скрыть.
  4. В списке свойств найдите свойство Visible и выберите из списка значений 2 – xlSheetVeryHidden.

Для отображения скрытого листа можно аналогичным способом установить значение -1 – xlSheetVisible.

Скрываем листы

Чтобы скрыть лист (ярлычки в самом низу окна Excel), кликните правой кнопкой мыши по ярлычку, который нужно скрыть, и в контекстном меню нажмите Скрыть
(Hide). Ярлычек исчезнет, но не удалится окончательно.

Нельзя скрыть все листы рабочей книги. Если Вы попытаетесь скрыть последний видимый лист, то получите вот такое предупреждение:

Книга должна содержать не менее одного видимого листа.
Чтобы скрыть, удалить или перенести выделенные листы, необходимо сначала вставить новый лист или сделать видимым скрытый лист.

Чтобы отобразить лист, кликните правой кнопкой мыши по любой видимой вкладке и выберите в появившемся меню Показать
(Unhide).

В появившемся диалоговом окне (Unhide) выберите лист, который хотите сделать видимым, и нажмите ОК.

Замечание:
За одно действие Вы можете сделать видимым только один лист.

Кроме этого, показать скрытые листы можно другим способом. Перейдите на вкладку Главная
(Home). В разделе Ячейки
(Cells) нажмите Формат
(Format). В группе команд Видимость
(Visibility) нажмите Скрыть и отобразить
(Hide & Unhide) и в открывшемся меню выберите Отобразить лист
(Unhide Sheet).

Появится диалоговое окно Вывод на экран скрытого листа
(Unhide). Выберите нужный лист и нажмите ОК, как было описано выше.

Скрываем рабочую книгу полностью

Чтобы полностью скрыть рабочую книгу Excel, перейдите на вкладку Вид
(View).

В разделе Окно
(Window) нажмите Скрыть
(Hide).

Окно Excel останется открытым, но область таблицы станет пустой. Чтобы отобразить рабочую книгу, нажмите Вид
> Окно
> Отобразить
(View > Window > Unhide).

Появится диалоговое окно Вывод на экран скрытого окна книги
(Unhide) со списком открытых в настоящий момент рабочих книг. Если Вы скрывали рабочие книги, которые в данный момент не открыты, то их в этом списке не будет.

Если Вы скроете рабочую книгу и сохраните файл, то в следующий раз, когда откроете этот файл, книга по-прежнему будет скрыта. Книга будет оставаться скрытой до тех пор, пока Вы сами не отобразите её.

Иногда возникают ситуации, когда надо скрыть лист со всем его содержимым от посторонних любопытных глаз. Очень часто это делается из контекстного меню листа (для счастливых обладателей 2007 Excel. Подробнее: ). Но при использовании данного метода необходимо защитить книгу, иначе отобразить скрытые листы сможет каждый (тем же правым щелчком мыши — Отобразить).

А что делать, если книгу не надо защищать? Ведь часто необходимо оставить пользователям возможность работы со структурой книги, например, добавлять листы. Как тогда скрыть лист так, чтобы его нельзя было отобразить? Есть достаточно простой способ через редактор VBA, при этом обладать навыком программирования вообще не нужно. Итак, определились какой лист надо скрыть.

Далее:

  1. заходим в редактор VBA(Alt+F11)
  2. жмем сочетание клавиш Ctrl+R или идем в меню ViewProject Explorer
    (чтобы отобразить окно объектов проекта VBA)
  3. жмем F4или через ViewProperties Window
    (чтобы отобразить окно свойств)
  4. в левой части окна (в Project Explorer) ищем книгу, лист в которой надо скрыть и раскрываем её папку(на скрине это VBA Project (Книга1))
  5. раскрываем папку Microsoft Excel Objects и выделяем там лист с нужным именем
  6. в Окне свойств (Properties Window) находим свойство Visibleи назначаем ему значение xlSheetVeryHidden

Чтобы затем отобразить этот лист необходимо свойству Visible задать значение — xlSheetVisible.

При этом для отображения листа необходимо будет обязательно зайти в редактор VBA — простым методом отобразить не получится. И книгу защищать не надо. Что нам и было необходимо.

Для большей надежности можно защитить проект VBA, чтобы не было возможности отобразить лист из VBA, не указав пароль. На функционал это не повлияет совершенно.

В том же окне VBA(Alt+F11):

  1. ToolsVBAProject Properties-вкладка Protection
  2. для защиты устанавливается галочка «Lock project for viewing
  3. вписывается/удаляется сам пароль в полях Passwordи Confirm password.

Скрыть все листы в книге, кроме листа с именем «Видимый» можно следующим макросом:

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

Скрывать листы можно используя контекстное меню, вызванное правой кнопкой мышки по ярлычку листа. Как было описано в предыдущем уроке. Но листы можно скрывать так, чтобы их не было видно даже в списке скрытых листов. Причем без использования защиты структуры книги. Для реализации данной задачи нужно воспользоваться параметрами, которые доступны в режиме VBA-редактора (Alt+F11).

Полезный Лайфхак в Excel

Чтобы запретить вставку новых строк и столбцов в Excel без использования защиты листа нужно сделать так:

Вот и все теперь в лист нельзя вставить строку или столбец. Если нужно запретить вставлять только строки, тогда вводим любое значение в самую последнюю строку (например, A1048576). А если запретить вставлять только столбцы тогда вводим любое значение в последнем столбце (например, XFD1).

Надежное скрытие листов, которых нельзя отобразить стандартными средствами (опцией Показать). Полезные лайфхаки для работы с листами и ячейками.

Любой лист книги можно скрыть, чтобы удалить его из представления. Можно также скрыть окно книги, чтобы удалить его из рабочей области. Данные скрытых листов и книг не видны, но на них по-прежнему могут указывать ссылки из других листов и книг. При необходимости скрытые листы и книги можно отобразить.

По умолчанию на панели задач отображаются все книги, которая открывается, но можно скрыть или отобразить их на панели задач при необходимости.

Примечание:
Снимки экрана в этой статье получены в Excel 2016. Если вы используете другую версию, интерфейс может немного отличаться, но функции будут такими же.

Скрытие и отображение окон книг на панели задач Windows

Excel 2013 реализована в Единый интерфейс документа, где каждая книга откроется в отдельном окне. Указанные ниже действия применяются только к Excel 2007 и 2010, для Windows.

Как найти все скрытые строки на листе Excel с помощью макроса

У нас иметься таблица с данными по заказам, но некоторые строки листа скрыты:

Необходимо узнать сколько и какие строки скрытии от визуального анализа таблицы заказов. По умолчанию Excel не располагает таким инструментом, который смог бы решить данную задачу в пару кликов мышкой. Вручную выполнить задачу можно, но сложно. Особенно если после отображения скрытых строк нам нужно снова их скрывать. Кроме того, лист может быть защищен от изменений паролем. Оптимальным решением данной задачи будет написание собственного макроса для отображения информации о скрытых строках.

Чтобы написать свой макрос откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

В редакторе вставьте новый модуль выбрав инструмент «Insert»-«Module» и введите в него этот код:

SubHiddenLinesInfo()
DimiAs Long
DimtextAs String
DimpervojAs String
text ="В данном листе скрыты следующие строки: "
Fori = 1ToActiveSheet.Rows.Count
IfActiveSheet.Rows(i).Hidden =True Then
Ifpervoj =""Then
pervoj = i
End If
Else
Ifpervoj <>""Then
text = text & vbNewLine & pervoj &":"& i - 1
pervoj =""
Else
Ifi > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).RowThen
Exit For
End If
End If
End If
Next
MsgBox text
End Sub

Теперь если в таблице заказов необходимо получить информацию о скрытых строках, тогда выберите инструмент для запуска макроса: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLinesInfo»-«Выполнить».

В результате после запуска макроса отобразиться сообщение с информацией о всех скрытых строках таблицы заказов.

Скрыть столбцы используя сортировку

Если пустых столбцов много и искать их зрительно проблематично, то можно использовать сортировку для того чтобы сгруппировать и после этого скрыть их, выделив сразу весь диапазон либо просто вывести за пределы печати. Минусом такого способа является то, что очередность столбцов изменяется.

Таблица в верхнем левом углу

В первую очередь рассмотрим все доступные варианты поиска номера последней заполненной строки для таблиц, расположенных в верхнем левом углу рабочего листа. Такие таблицы обычно представляют собой простые базы данных в Excel, или, как их еще называют, наборы записей.

Пример таблицы с набором данных в Excel

Вариант 1
Основная формула для поиска последней строки в такой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(1, 1).CurrentRegion.Rows.Count

Вариант 2
Ниже таблицы не должно быть никаких записей:
PosStr = ActiveSheet.UsedRange.Rows.Count

Вариант 3
В первом столбце таблицы не должно быть пропусков, а также в таблице должно быть не менее двух заполненных строк, включая строку заголовков:
PosStr = Cells(1, 1).End(xlDown).Row

Вариант 4
В первой колонке рабочего листа внутри таблицы не должно быть пропусков, а ниже таблицы в первой колонке не должно быть других заполненных ячеек:
PosStr = WorksheetFunction.CountA(Range("A:A"))

Вариант 5
Ниже таблицы не должно быть никаких записей:
PosStr = Cells.SpecialCells(xlLastCell).Row

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression – переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False – лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden – лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True – лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Примеры:

Лист1.Visible = xlSheetHidden

Лист2.Visible = 1

Worksheets(Worksheets.Count).Visible = xlVeryHidden

Worksheets(“МойЛист”).Visible = True

Описание работы

С помощью надстройки можно автоматически скрыть пустые строки или столбцы. Для этого необходимо:

  1. Открыть вкладку меню VBA-Excel, которая будет доступна после установки программы.
  2. В выпадающем меню Удалить/скрыть пустые выбрать команду Скрыть пустые строки (столбцы при необходимости).

Автоматическое скрытие с использованием надстройки

Более функциональным средством VBA является надстройка, позволяющая удалять и скрывать не только пустые столбцы, но и столбцы, отвечающие условиям пользователя, которые можно задавать в диалоговом окне.

Пользователь на свой выбор может удалять либо скрывать пустые столбцы. Может удалять либо скрывать столбцы, содержащие либо не содержащие заданный текст, при этом на свой выбор учитывать либо не учитывать регистр. Возможен одновременный поиск сразу нескольких текстовых выражений, разделенных знаком ; (точка с запятой). Пользователь также может на свое усмотрение расширять область действия макроса и ограничивать его, задавая номера первого и последнего столбца. Кроме того, надстройка освобождает пользователя от поиска нужного макроса, так как позволяет вызывать диалоговое окно прямо из панели инструментов Excel.

И еще одна надстройка, для скрытия и удаления строк и столбцов, в зависимости от значений ячеек и заданных условий. Работает более гибко, но несколько медленнее, чем первая, так как проверяет не столбцы, а ячейки. Позволяет удалять не только строки и столбцы, но и ячейки с заданными значениями и с заданным сдвигом.

Источники

  • https://www.planetaexcel.ru/techniques/2/121/
  • https://vremya-ne-zhdet.ru/vba-excel/rabochiy-list-obrashcheniye-pereimenovaniye-skrytiye/
  • https://tutorexcel.ru/knigi-i-listy/kak-skryt-i-pokazat-skrytye-listy-v-excel/
  • https://micro-solution.ru/projects/addin_vba-excel/sheets-visible
  • http://macros-vba.ru/makrosy/excel/114-kak-skryt-pustye-stroki-skrytie-pustyh-strok
  • https://iiorao.ru/prochee/kak-sdelat-skrytyj-list-v-excel-nevidimym.html
  • https://exceltable.com/vba-macros/skrytye-stroki-i-stolbcy-vba
  • http://macros-vba.ru/makrosy/excel/115-kak-skryt-pustye-stolbtsy-skrytie-pustyh-stolbtsov
  • https://vremya-ne-zhdet.ru/vba-excel/nomer-posledney-zapolnennoy-stroki/
  • https://micro-solution.ru/projects/addin_vba-excel/hide-range

Понравилась статья? Поделить с друзьями:
  • Макросы в excel для склада
  • Макросы в excel vba тело
  • Макросы в excel для работы с графиками
  • Макросы в excel vba самоучитель с примерами
  • Макросы в excel для последовательности