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 Sub

Style задаётся в Properties до запуска. В режиме списка пользователь не должен вводить четвёртый неизвестный статус. Начальный ListIndex = -1 требует осознанного выбора.

Проверка выбора выполняется перед чтением Value. Сам видимый текст ещё не является гарантией корректной связи с объектом, если список имеет несколько колонок и BoundColumn.

Учебный код: ComboBox в VBA: заполнение и выбор значения.
Учебный код: ComboBox в VBA: заполнение и выбор значения.

Как проверить результат

При выборе «В работе» ожидается этот же статус в B2. Без выбора команда выводит подсказку.
При выборе «В работе» ожидается этот же статус в B2. Без выбора команда выводит подсказку.

При выборе «В работе» ожидается этот же статус в B2. Без выбора команда выводит подсказку.

Ограничения и частые ошибки

Для редактируемого ComboBox нужен отдельный контроль допустимых новых значений. MatchRequired и Style решают связанные, но разные задачи и не заменяют бизнес-правило принятия статуса.

В многоколоночном списке можно показывать название, а хранить код через BoundColumn. Обязательно проверьте, что записывается в ячейку — подпись или идентификатор.

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

Проверка поля на форме

ComboBox cboStatus показывает выбранный статус «В работе».
ComboBox cboStatus показывает выбранный статус «В работе».

Надпись рядом со списком объясняет, какое значение выбирается. Имя cboStatus служит коду и не должно быть единственной пользовательской подсказкой.

Проверка перед рабочим запуском

  • Style настроен как список.
  • Без выбора запись не происходит.
  • «В работе» записывается без опечаток.
  • Источник не смешан с RowSource.

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

Продолжить изучение: Select Case в VBA: выбор действия по значению, UserForm в Excel VBA: первая форма ввода, ListBox в VBA: список, выбор и несколько столбцов.

Разберитесь с макросами вместе с преподавателем

На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.

Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.

Записаться на бесплатный урок