- Введение
- Системные требования
- Установка и настройка
- Быстрый старт
- Основные функции
- Работа с элементами управления
- Настройка стиля
- Создание переключателей
- Добавление иконок
- Работа с коллекцией стиля
- Устранение неполадок
- Часто задаваемые вопросы
Класс clsMultiStateCheckBox реализует многопозиционный флажок для VBA UserForms с тремя и более состояниями: снят, установлен и неопределён, а также другими пользовательскими состояниями. Этот класс предоставляет настраиваемый внешний вид и поведение с возможностью легкой интеграции в VBA UserForms.
- Применять современный дизайн к элементам управления флажками
- Обеспечивать многопозиционную функциональность за пределами стандартного флажка
- Настройку цветов и шрифтов для флажков
- Добавление иконок и визуальных элементов
- Управление видимостью и состоянием элементов управления флажками
- Microsoft Excel (2010 или новее рекомендуется)
- Включенная поддержка VBA
- Microsoft Forms 2.0 Object Library
- Windows 7 или новее
- Откройте Excel и перейдите в редактор VBA (нажмите Alt+F11)
- В меню выберите "File" > "Import File"
- Выберите файл
clsMultiStateCheckBox.clsиз каталогаvba-files/Class/ - Нажмите "Open" для импорта класса
- В редакторе VBA выберите "Tools" > "References"
- Найдите и установите флажок напротив "Microsoft Forms 2.0 Object Library"
- Нажмите "OK" для сохранения изменений
- В редакторе VBA создайте новую пользовательскую форму
- Добавьте элемент управления Label, который будет служить флажком
- Добавьте переменную класса в форму:
Dim MultiStateCheckBox As clsMultiStateCheckBox- Создайте новую пользовательскую форму в Excel
- Добавьте элемент управления Label для использования в качестве флажка
- В событии
UserForm_Initializeдобавьте следующий код:
Private Sub UserForm_Initialize()
Set MultiStateCheckBox = New clsMultiStateCheckBox
Call MultiStateCheckBox.Initialize(Me.Label1)
End Sub- Запустите форму, чтобы увидеть элемент управления многопозиционного флажка
Private Sub UserForm_Initialize()
Set MultiStateCheckBox = New clsMultiStateCheckBox
Dim icons As Variant
icons = Array(59193, 59194, 59195) ' Снят, установлен, неопределён
Dim colors As Variant
colors = Array(vbRed, vbGreen, vbBlue) ' Цвета для каждого состояния
Call MultiStateCheckBox.Initialize(Me.Label1, 0, icons, colors)
End SubМетод Initialize - это основной способ настройки многопозиционного флажка:
- Устанавливает начальное состояние (снят, установлен, неопределён и т.д.)
- Настраивает свойства внешнего вида
- Создает обработчики событий для взаимодействия
- Создает визуальные элементы для разных состояний
- Состояние снятия (обычно представлено пустым квадратом)
- Состояние установки (обычно представлено галочкой)
- Неопределенное состояние (обычно представлено тире или заполненным квадратом)
- Дополнительные пользовательские состояния могут быть определены
Для флажков класс автоматически:
- Применяет указанные значки состояний
- Создает визуальные элементы для разных состояний
- Обрабатывает события клика для переключения между состояниями
- Обеспечивает визуальную обратную связь во время взаимодействия
- Обрабатывает события мыши для взаимодействия
Класс позволяет настраивать:
- Начальное состояние
- Поведение перехода между состояниями (циклическое/непрерывное)
- Значки для каждого состояния
- Цвета для каждого состояния
- Текстовое представление состояний
Класс предоставляет события для:
- Изменения состояния во время взаимодействия
- События клика на флажке
- Визуальная обратная связь во время изменения состояния
Класс предоставляет широкие возможности настройки цветов:
- Цвета, специфичные для состояний
- Цвета значков для разных состояний
- Цвета фона (если применимо)
- Цвета текста для меток состояний
Цвета можно настроить при инициализации:
Dim colors As Variant
colors = Array(vbRed, vbGreen, vbBlue)
MultiStateCheckBox.Initialize Me.Label1, 0, Array(59193, 59194, 59195), colorsПосле инициализации можно изменить свойства:
With MultiStateCheckBox
.SetStateColor 1, RGB(255, 0, 0) ' Установить красный цвет для второго состояния
.CurrentIcon = 59194 ' Установить текущий значок в состояние снятия
End WithКласс позволяет:
- Устанавливать имя шрифта для значков (обычно Segoe MDL2 Assets)
- Настройка коэффициента размера шрифта через свойство
FontSizeFactor
Класс clsMultiStateCheckBox может использоваться для создания переключателей:
- Установка соответствующих значков для каждого состояния
- Настройка свойства
Cyclicдля управления переключением состояний - Использование метода
SetStateColorдля настройки внешнего вида для каждого состояния
Private Sub UserForm_Initialize()
Set MultiStateCheckBox = New clsMultiStateCheckBox
' Создание простого переключателя вкл/выкл с пользовательскими значками
Dim icons As Variant
icons = Array(60434, 60433) ' Значки переключателя выкл/вкл
Call MultiStateCheckBox.Initialize(Me.Label1, 0, icons)
MultiStateCheckBox.Cyclic = True ' Включить циклическое переключение между состояниями
End SubКласс использует шрифт Segoe MDL2 Assets для иконок:
- Состояние снятия: 59193 (пустой квадрат)
- Состояние установки: 59194 (квадрат с галочкой)
- Неопределенное состояние: 59195 (квадрат с тире)
- Различные другие иконки доступны в перечислении enumIcons
Для настройки значков флажка:
- Создайте массив кодов иконок
- Передайте его в метод Initialize:
Dim customIcons As Variant
customIcons = Array(59193, 59194, 59195) ' Снят, установлен, неопределён
MultiStateCheckBox.Initialize Me.Label1, 0, customIcons- Иконки отображаются с использованием шрифта Segoe MDL2 Assets по умолчанию
- Цвет иконки изменяется в зависимости от состояния флажка
- Иконки автоматически масштабируются под размер элемента управления
После инициализации флажок предоставляет доступ к своим свойствам:
' Получение свойств флажка
Dim currentState As Byte
currentState = MultiStateCheckBox.Item
Dim stateText As String
stateText = MultiStateCheckBox.StateTextКласс флажка управляет одним элементом управления, но предоставляет доступ к его свойствам.
Класс флажка сосредоточен на одном элементе управления, поэтому итерация обычно не требуется.
' Изменение свойств флажка
With MultiStateCheckBox
.Item = 1 ' Установить в состояние снятия
.StateText = ChrW(59194) ' Установить текст состояния в значок снятия
.Cyclic = False ' Отключить циклическое переключение
End With- Убедитесь, что Microsoft Forms 2.0 Object Library включена в ссылки
- Проверьте, что элемент управления Label добавлен до вызова метода Initialize
- Убедитесь, что свойство MultiUse установлено в True для класса
- Проверьте, что события элемента управления не перегружены другими обработчиками
- Убедитесь, что свойства элемента управления не изменяются вручную во время работы класса
- Проверьте, что класс не инициализируется несколько раз
- Уменьшите количество изменений состояния во время инициализации
- Избегайте частых вызовов геттеров свойств во время взаимодействия
- Используйте свойства видимости и доступности должным образом
- "Object variable not set" - убедитесь, что переменная класса правильно инициализирована
- "Method or data member not found" - проверьте, что класс правильно импортирован
- "Can't assign to property" - избегайте прямого присвоения вложенным объектам без проверки на Nothing
Ответ: Используйте метод SetStateColor для установки цветов для конкретных состояний после инициализации.
Ответ: Класс специально поддерживает многопозиционную функциональность флажка с использованием элементов управления Label.
Ответ: Да, можно создать несколько экземпляров класса для разных флажков, но каждый экземпляр управляет одним элементом управления флажком.
Ответ: Класс использует значения символов Unicode для иконок. Для пользовательских иконок можно использовать разные коды символов или рассмотреть использование элементов управления изображениями.
Ответ: Класс протестирован с Excel 2010 и новее. Совместимость с более ранними версиями не гарантируется.
Ответ: Текущая версия обеспечивает визуальную обратную связь во время изменения состояния, но прямая настройка анимации недоступна.
Ответ: Класс предоставляет события Click и изменения состояния, которые можно обрабатывать в модуле формы.