ComboBox совмещает поле и выпадающий список. Его можно настроить так, чтобы пользователь выбирал только подготовленное значение.
Создадим список статусов без произвольного ручного текста.
Что подготовить
На UserForm1 добавьте cboStatus и cmdSave. Для ComboBox задайте Style = 2 — fmStyleDropDownList, RowSource оставьте пустым.
На листе «Проверка» B2 предназначена для статуса. Initialize и Click относятся к модулю формы.
Код и порядок выполнения
Option Explicit
Private Sub UserForm_Initialize()
With Me.cboStatus
.Clear
.AddItem "Новый"
.AddItem "В работе"
.AddItem "Готово"
.ListIndex = -1
End With
End Sub
Private Sub cmdSave_Click()
If Me.cboStatus.ListIndex < 0 Then
MsgBox "Выберите статус": Exit Sub
End If
ThisWorkbook.Worksheets("Проверка").Range("B2").Value = _
Me.cboStatus.Value
End SubStyle задаётся в Properties до запуска. В режиме списка пользователь не должен вводить четвёртый неизвестный статус. Начальный ListIndex = -1 требует осознанного выбора.
Проверка выбора выполняется перед чтением Value. Сам видимый текст ещё не является гарантией корректной связи с объектом, если список имеет несколько колонок и BoundColumn.
Как проверить результат
При выборе «В работе» ожидается этот же статус в B2. Без выбора команда выводит подсказку.
Ограничения и частые ошибки
Для редактируемого ComboBox нужен отдельный контроль допустимых новых значений. MatchRequired и Style решают связанные, но разные задачи и не заменяют бизнес-правило принятия статуса.
В многоколоночном списке можно показывать название, а хранить код через BoundColumn. Обязательно проверьте, что записывается в ячейку — подпись или идентификатор.
После изменения списка старое выбранное значение может перестать существовать. Перезаполняя ComboBox, сбросьте или восстановите выбор по проверенному ключу, а не по случайному прежнему индексу.
Проверка поля на форме
Надпись рядом со списком объясняет, какое значение выбирается. Имя cboStatus служит коду и не должно быть единственной пользовательской подсказкой.
Проверка перед рабочим запуском
- Style настроен как список.
- Без выбора запись не происходит.
- «В работе» записывается без опечаток.
- Источник не смешан с RowSource.
Сначала выполните пример на учебной копии с указанными именами листов и диапазонами. Сравните исходные данные и результат, затем сохраните проверенный вариант процедуры.
Продолжить изучение: Select Case в VBA: выбор действия по значению, UserForm в Excel VBA: первая форма ввода, ListBox в VBA: список, выбор и несколько столбцов.
Разберитесь с макросами вместе с преподавателем
На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.
Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.