Найти тему
VBA Excel с нуля

VBA Excel № 173. Использование ЭУ ListBox для активизации листа

Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Что отображается в ListBox

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

  1. Название листа – имя каждого листа в книге.
  2. Тип листа – (рабочий лист, диаграмма или лист диалога Excel версии 5/95).
  3. Количество непустых ячеек – число заполненных ячеек на листе.
  4. Состояние листа – отображается ли лист или он скрыт.

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

Инициализация формы UserForm

Когда форма (UserForm) загружается, запускается процедура UserForm_Initialize. Эта процедура собирает данные о каждом листе и подготавливает их для отображения в ListBox. Рассмотрим код этой процедуры и его действия.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Внутри цикла For Each перебираются все листы книги. Если текущий лист совпадает с активным, его позиция сохраняется в переменной ListPos, чтобы потом сделать его выбранным в ListBox.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

В зависимости от типа листа заполняются соответствующие столбцы массива. Если это обычный рабочий лист, то в третьем столбце указывается количество непустых ячеек, а если это диаграмма или лист диалога, то значение устанавливается в "Н/Д" (не доступно).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

В четвертом столбце записывается состояние видимости листа: "ИСТИНА" для видимых листов и "ЛОЖЬ" для скрытых. В конце каждой итерации счетчик ShtNum увеличивается, и цикл переходит к следующему листу.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

После завершения цикла массив SheetData загружается в ListBox, а также устанавливается ширина столбцов и выбирается активный лист. Весь код инициализации формы можно увидеть в файле-примере.

📌 Скачать файл пример, можно в конце статьи.

Обработка событий в ListBox

Когда пользователь выбирает лист в ListBox, происходит событие lbxSheets_Click. Рассмотрим код этой процедуры.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Если флажок предварительного просмотра (chkPreview) установлен, выбранный лист будет активирован сразу после его выбора в ListBox.

Обработка нажатия на кнопку OK

Когда пользователь нажимает кнопку OK, запускается процедура cmdOK_Click, которая выполняет следующие действия:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Здесь создается объектная переменная UserSheet, которая ссылается на выбранный в ListBox лист. Если лист видимый, он сразу активируется. Если лист скрыт, пользователю предлагается сделать его видимым. В зависимости от ответа пользователя лист либо становится видимым и активируется, либо возвращается к исходному листу.

Обработка двойного щелчка на опции списка ЭУ ListBox

Процедура lbxSheets_DblClick выполняется при двойном щелчке по элементу ListBox. Она просто вызывает процедуру cmdOK_Click, что делает двойной щелчок эквивалентным нажатию кнопки OK.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Обработка нажатия на кнопку Отмена

Если пользователь решит отменить действие и нажмет кнопку Отмена, запустится процедура cmdCancel_Click, которая вернет его на исходный лист и закроет форму.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Обработка изменения состояния флажка предварительного просмотра

Флажок chkPreview позволяет пользователю выбирать, будет ли выбранный лист активироваться сразу после выбора в ListBox. Процедура chkPreview_Click обрабатывает изменения этого флажка.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

СКАЧАТЬ ФАЙЛ ПРИМЕР

✔ На моём телеграмм-канале появился анонс на следующую статью «Фильтрация списка ListBox в поле TextBox», которая выйдет в четверг 05.09.2024 с НОВЫМ Excel ФАЙЛ-ПРИМЕРОМ. Скачать его уже сейчас можно уже сейчас по этой ССЫЛКЕ. Так же там есть короткое видео работы программы.

-14