Найти в Дзене
VBA Excel с нуля

VBA Excel № 169. Передача опций элемента управления ListBox

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

В некоторых приложениях требуется возможность выбирать несколько пунктов из одного списка и создавать на их основе новый список, отображаемый в другом элементе управления ListBox. Примером такой ситуации может служить вкладка "Панель быстрого доступа" в диалоговом окне "Параметры Excel". На скриншоте ниже показано диалоговое окно с двумя элементами управления ListBox.

Скриншот с моего ноутбука. Диалоговое окно с двумя элементами управления ListBox.
Скриншот с моего ноутбука. Диалоговое окно с двумя элементами управления ListBox.

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

В скачанном примере вы увидите какие имена у элементов управления.

Кнопка "Добавить >>" добавляет элемент, выделенный в левом элементе управления ListBox, в правый элемент управления ListBox. Кнопка "Удалить" удаляет выделенный элемент из правого списка. Флажок определяет поведение при добавлении повторяющихся элементов в список. Если флажок "Разрешить дубликаты" не установлен, то значение переместится.

Код этого примера не так уж и сложен (расположен в модуле формы). Ниже приведена процедура, которая выполняется после нажатия на кнопку "Добавить >>".

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

Процедура, связанная с кнопкой "Удалить", будет попроще.

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

Обратите внимание, что ни одна из процедур не проверяет, действительно ли выбран элемент. Вместо этого свойство кнопки "Enabled" устанавливается в "False" на этапе разработки. Для активизации кнопок в нужное время вызывается другая процедура, которая называется EnableButtons.

Процедура EnableButtons вызывается не только из обработчиков событий cmdAdd_Click и cmdRemove_Click, но и из обработчиков событий изменения (Change) элементов управления ListBox. Код обработчиков событий изменения элементов управления ListBox и процедуры EnableButtons приведен ниже.

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

После сравнения свойства ListIndex с -1 возвращается значение True или False. Это значение присваивается свойству Enabled кнопок. В результате пользователь может нажать на кнопку только в случае, если выбран элемент.

Процедура для закрытия формы:

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

Для вызова формы используется следующая процедура, расположенная в ОБЫЧНОМ модуле:

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

Итак, попробуем разобрать строку - .AddItem Format(DateSerial(2000, i, 1), "mmmm"). Она выполняет добавление в элемент управления ListBox названий месяцев.

DateSerial(2000, i, 1):

  • Функция DateSerial(year, month, day) создаёт дату по указанным год, месяц и день.
  • В данном случае, создаётся дата, где год всегда равен 2000, день всегда равен 1, а месяц задаётся переменной i. Значение i изменяется от 1 до 12 в цикле For.
  • Таким образом, при первом проходе цикла i = 1, будет создана дата 1 января 2000 года, при втором проходе i = 2 — дата 1 февраля 2000 года, и так далее до 1 декабря 2000 года.

Format(DateSerial(2000, i, 1), "mmmm"):

  • Функция Format(expression, format) используется для форматирования значения в указанном формате.
  • DateSerial(2000, i, 1) возвращает дату, которая передаётся в качестве аргумента expression.
  • Формат "mmmm" указывает, что нужно вывести полное название месяца. Например, для даты 1 января 2000 года будет возвращено значение "Январь", для даты 1 февраля 2000 года — "Февраль" и так далее.

.AddItem:

  • Метод AddItem добавляет элемент в элемент управления ListBox.
  • В данном случае, в ListBox добавляется название месяца, отформатированное в строковом виде.

Таким образом, результатом выполнения этого кода является добавление всех 12 месяцев в ListBox, начиная с января и заканчивая декабрём.

На вызов формы я назначил кнопку:

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

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

✔ На моём телеграмм-канале появился анонс на следующую статью, которая выйдет 08.08.2024 с НОВЫМ Excel файлом-примером. Скачать его уже сейчас можно по этой ССЫЛКЕ

Наука
7 млн интересуются