Excel VBA. Запретить отправку UserForm, если не все поля заполнены

Перед отправкой пользовательской формы в Excel VBA можно сделать проверку заполнения всех полей:

1. Проверка при нажатии кнопки отправки

Private Sub CommandButton1_Click() ' Замените CommandButton1 на имя вашей кнопки
    ' Проверяем каждое поле
    If TextBox1.Value = "" Then
        MsgBox "Заполните поле Текстовое поле 1", vbExclamation
        TextBox1.SetFocus
        Exit Sub
    End If

    If ComboBox1.Value = "" Then
        MsgBox "Выберите значение из списка", vbExclamation
        ComboBox1.SetFocus
        Exit Sub
    End If

    ' Добавьте проверки для других полей

    ' Если все проверки пройдены - выполняем основную логику
    Call ОсновнаяПроцедура
End Sub

Недостаток этого простого решения — ручной ввод If — End If для каждого поля UserForm. Для формы с десятками полей делать это скучновато. Плюс в том, что такой подход позволяет сделать подсказку пользователю индивидуальной для каждого поля.

2. Универсальная функция проверки

Private Sub CommandButton1_Click()
    If Not ВсеПоляЗаполнены Then Exit Sub

    ' Основная логика при успешной проверке
    Call ОсновнаяПроцедура
End Sub

Private Function ВсеПоляЗаполнены() As Boolean
    Dim ctrl As Control

    For Each ctrl In Me.Controls
        ' Проверяем только текстовые поля и комбобоксы
        If TypeName(ctrl) = "TextBox" Or TypeName(ctrl) = "ComboBox" Then
            If ctrl.Value = "" Then
                MsgBox "Заполните поле: " & ctrl.Name, vbExclamation
                ctrl.SetFocus
                ВсеПоляЗаполнены = False
                Exit Function
            End If
        End If
    Next ctrl

    ВсеПоляЗаполнены = True
End Function

Сообщает название поля в коде UserForm, например «Пожалуйста, заполните поле: ComboBox1«, что может быть непонятно для пользователя.

3. Проверка при изменении данных (опционально)

Private Sub TextBox1_Change()
    CommandButton1.Enabled = (TextBox1.Value <> "" And TextBox2.Value <> "")
End Sub

Private Sub TextBox2_Change()
    CommandButton1.Enabled = (TextBox1.Value <> "" And TextBox2.Value <> "")
End Sub

Дополнительно:

    • Для обязательных полей можно добавить подсказки или пометку «*»

    • Можно выделять незаполненные поля красным цветом:

If TextBox1.Value = "" Then
    TextBox1.BackColor = RGB(255, 200, 200)
Else
    TextBox1.BackColor = vbWhite
End If

    • Для более сложных проверок используют регулярные выражения или дополнительные условия (например, проверку формата email).

Если что, напомним как добавить макрос и заставить его работать:

1) В Excel, Word, PP и т.д., нажать Alt + F11, или кнопку Visual Basic на вкладке Разработчик. В меню редактора VBA вставить новый модуль Insert — Module

 и вставить в окошко редактора расположенный выше код, далее можно сохранить код, нажав
 Ctrl + S и закрыть окно VBA (Alt + F4);

2) Нажать Alt + F8, выбрать макрос и нажать кнопку Выполнить.

Telegram
VK
Email
Прокрутить вверх