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

В этом случае выходом из ситуации будет скрытие “лишних” листов книги – таким образом мы сможем избежать нежелательный просмотр и редактирование данных.

В данной статье мы рассмотрим возможные варианты скрытия листов и попытаемся автоматизировать этот процесс.

Стандарты

Скрыть и отобразить листы книги можно вызвав в меню Формат – Лист соответствующие функции (для Excel 2003) либо вызвав контекстное меню на ярлыке любого видимого листа.

Скрыть – скрытие листа с панели ярлыков листов (та, что находится в нижней части окна).

Отобразить… – выбор листа из числа скрытых для отображения на панели ярлыков листов.

ПлюсыМинусы
  • функционал уже встроен в Excel
  • простота использования
  • отсутствие необходимости использования макросов
  • отобразить лист может любой, даже неподготовленный пользователь

Долой ярлыки

Если фронт-офисная часть книги состоит из одного листа (остальные необходимо скрыть), или же несколько листов связаны взаимными ссылками, то можно отказаться от использования панели ярлыков.

Microsoft Excel - Панель ярлыков листов

Настройка видимости панели задается в параметрах Excel (меню Сервис – Параметры… Excel 2003 либо Office - Параметры Excel - Дополнительно в Excel 2007) и сохраняется на уровне книги, т.е. другой пользователь не обнаружит панель ярлыков, однако сможет ее включить, зная путь к соответствующей настройке.

На уровне кода Visual Basic этот параметр можно устанавливать, например при открытии/закрытии книги следующим образом:

Private Sub Workbook_Open()

    ActiveWindow.DisplayWorkbookTabs = False

End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    ActiveWindow.DisplayWorkbookTabs = True

End Sub

Процедура Workbook_Open скрывает панель ярлыков при открытии книги, а Workbook_BeforeClose – отображает ее при закрытии книги.

ПлюсыМинусы
  • функционал уже встроен в Excel
  • простота использования
  • отсутствие необходимости использования макросов
  • отобразить панель может любой, даже неподготовленный пользователь

Очень скрытый лист

Ранее мы рассмотрели стандартный путь скрытия листа.

Свойство видимости листа также можно найти в редакторе кода Visual Basic, но кроме ожидаемых свойств Visible (видимый) и Hidden (скрытый) есть еще одно свойство – VeryHidden, которым можно пользоваться в случае, если вы хотите усложнить конечному пользователю жизнь и не просто скрыть лист, но и сделать его недоступным для отображения стандартными средствами.

Для этого:

  • (Excel 2003) на панели Visual Basic активируем Элементы управления для отображения панели элементов управления. На панели нажмем кнопку Свойства.
  • (Excel 2007) на вкладке Разработчик в группе Элементы управления нажмем кнопку Свойства.

В открывшемся окне свойств текущего листа находим параметр Visible и установим ему значение “2 - xlSheetVeryHidden”.

Microsoft Excel - Visual Basic - Свойства листа

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

Единственным способом отображения листов, скрытых подобным образом, является изменение параметра видимости листа в свойствах листа.

ПлюсыМинусы
  • функционал уже встроен в Excel
  • простота использования
  • отсутствие необходимости использования макросов
  • пользователь должен обладать определенным уровнем знаний для отображения листа
  • книга должна содержать один лист или листы должны быть связаны взаимными ссылками

Макрос вам в помощь

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

Скрыть текущий лист

Макрос скрывает текущий выбранный лист:

Public Sub HideCurrent()

    ActiveSheet.Visible = xlSheetHidden ' или xlSheetVeryHidden

End Sub

Скрыть определенный лист

Макрос скрывает лист, имя или порядковый номер которого указан пользователем:

Public Sub HideSheet()

    Sheets("Лист3").Visible = xlSheetHidden ' или xlSheetVeryHidden
    ' или
    Sheets(3).Visible = xlSheetHidden ' или xlSheetVeryHidden
    ' или
    Лист3.Visible = xlSheetHidden ' или xlSheetVeryHidden

End Sub

Строки 3, 5 и 7 по-разному определяют идентификатор листа, но результат функции в любом из случаев будет одинаковым.

Скрыть все листы, кроме текущего

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

Public Sub HideAllButCurrent()

    Dim i

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> ActiveSheet.Name Then Sheets(i).Visible = xlSheetHidden ' или xlSheetVeryHidden
    Next i

End Sub

Данный макрос перебирает все листы книги, и если это не текущий лист – скрывает его.

Отобразить все листы

Макрос отображает все листы книги, в том числе скрытые и “очень скрытые”.

Sub UnhideSheets()

    Application.ScreenUpdating = False

    Dim wsSheet As Worksheet

    For Each wsSheet In ActiveWorkbook.Worksheets
        wsSheet.Visible = xlSheetVisible
    Next wsSheet

    Application.ScreenUpdating = True

End Sub

Данный макрос перебирает все листы книги, и если лист скрыт – отображает его.

Скачать для Excel 2003, Excel 2007+

Добавить комментарий


Защитный код
Обновить

Вверх