Данный подход позволит установить сделать взаимоисключающий выбор помощью элемента управления "флажок".
Основная цель заключается в управлении состоянием CheckBox: если один CheckBox активирован, остальные становятся неактивными, и наоборот.
📢 Файл с примером размещен в конце статьи 🔽
▶️ Модуль класса
- это специальный модуль в VBA, который используется для создания объектов с определенными свойствами и методами.
Модуль класса позволяет определить собственные типы объектов, что делает программу более структурированной и управляемой.
⏺ Основные характеристики
- Инкапсуляция: модуль класса объединяет данные (свойства) и процедуры (методы), которые работают с этими данными, в одном месте.
- События: можно создавать события и их обработчики, что позволяет реагировать на действия пользователя или другие условия.
- Переиспользование кода: один и тот же класс можно использовать многократно, создавая множество объектов с одинаковыми свойствами и методами.
⏺ Преимущества
- Организация кода: легче управлять сложными проектами, когда логика распределена по классам.
- Модульность: классы можно использовать как строительные блоки, которые легко комбинировать и модифицировать.
- Поддержка и расширяемость: упрощает поддержку и добавление новых функций без изменения существующего кода.
🔘 Шаг 1. Объявление и инициализация элемента управления
- Option Explicit объявляет все переменные перед их использованием, что помогает избежать ошибок.
- Public WithEvents Chk As MSForms.CheckBox объявляет переменную Chk типа CheckBox с поддержкой событий. Это позволяет отслеживать события, такие как клик, для данного CheckBox.
🔘 Шаг 2. Основная процедура (проверка состояния CheckBox) включает следующие этапы:
- Извлекается индекс текущего CheckBox из его имени.
- Проходим цикл по всем объектам на листе.
- Если целевой CheckBox активирован (True) все остальные CheckBox деактивируются и отключаются.
- Если целевой CheckBox неактивен (False) Все остальные CheckBox становятся активными и включаются
🔘 Шаг 3. Обработка события Click
Когда пользователь кликает по элементу управления, вызывается процедура OptionCheckBox, передавая Chk в качестве аргумента.
▶️ Стандартный модуль (управление событиями и состояниями CheckBox)
Для инициализации и управления группой "флажков" на активном листе, используя коллекцию объектов класса Class_Chk в стандартный модуль помещаем код:
Код предназначен для создания коллекции объектов Class_Chk, каждый из которых связан с одним из CheckBox на активном листе. Это позволяет эффективно управлять событиями и состояниями CheckBox.
Коллекция будет содержать объекты Class_Chk, каждый из которых связан с определенным элементом управления.
Основная публичная процедура Class_Chk_Init инициализирует коллекцию CheckBox:
Процедура Class_Chk_Init инициализирует коллекцию объектов Class_Chk для всех CheckBox на активном листе, имена которых соответствуют шаблону "CheckBox**". Это позволяет управлять событиями и состоянием элементов управления.
Например,
▶️ Практический пример
В качестве примера рассмотрим задачу определения стоимости товара с учетом скидки.
Для решения задачи, добавим макросы, которые будут обрабатывать события клика по CheckBox, рассчитывать скидку и устанавливать итоговую цену:
🔘 События клика: Для каждого элемента управления создано событие Click. Каждое из которых вызывает процедуру UpdateDiscountedPrice, которая обновляет цену со скидкой в ячейке G2.
🔘 Проверка на выбранные CheckBox:
- Если сумма скидок (переменная discount) остается равной нулю, значит, ни один CheckBox не выбран. В этом случае ячейка с итоговой стоимостью (G2) устанавливается в пустое значение.
- Если хотя бы один CheckBox выбран, производится вычисление цены со скидкой.
🔘 Процедура UpdateDiscountedPrice:
- Получение исходной цены: Исходная цена берется из ячейки F2.
- Инициализация переменной скидки: Переменная скидки discount инициализируется значением 0.
- Применение скидки: Проверяется состояние каждого CheckBox, и соответствующая скидка добавляется к переменной discount.
- Вычисление цены со скидкой: Цена со скидкой рассчитывается путем умножения исходной цены на (1 - discount).
- Установка цены со скидкой: Результат устанавливается в ячейку G2.
Этот подход позволяет автоматически рассчитывать и обновлять цену со скидкой в зависимости от состояния выбранных CheckBox:
Таким образом, пользователь может легко видеть итоговую цену со скидкой, просто отмечая нужные CheckBox на листе Excel.
🔶 Узнать о других способах и приемах работы в Excel можно найти в наших предыдущих обзорах 🔽
🙌 Оставайся с нами на связи и узнавай больше о других методах и приемах работы в Excel:
✅ СКАЧАТЬ ПРИМЕР 🔽