Есть ли способ исправить код, чтобы проверить, является ли текстовое поле или поле со списком пустым? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь проверить, выполнил ли пользователь все текстовые поля со списками.На данный момент он работает, но не так хорошо, как вызывает msgbox после каждого незавершенного и каждого заполненного окна.

Я попробовал приведенный ниже код и переместил местоположение MsgBox

Sub CheckEmpty()

Dim ctrlT As Object
Dim ctrlC As Object

For Each ctrlT In Me.Controls
If TypeName(ctrlT) = "TextBox" Then
    If ctrlT.Value = Empty Then
        ctrlT.BackColor = RGB(255, 0, 0)
    End If
End If
MsgBox "Please complete all missing information"
Next ctrlT

For Each ctrlC In Me.Controls
If TypeName(ctrlC) = "ComboBox" Then
    If ctrlC.Value = Empty Then
        ctrlC.BackColor = RGB(255, 0, 0)
    End If
End If
MsgBox "Please complete all missing information"
Next ctrlC

End Sub

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

Оно также не должно выдавать сообщение об ошибке, если всезавершено, что он в настоящее время делает ....

1 Ответ

0 голосов
/ 21 мая 2019

Предположительно, вы хотите что-то сделать с данными после CheckEmpty(), чтобы вызывающему коду нужно было знать результат теста, чтобы решить, следует ли его продолжать - CheckEmpty(), вероятно, должна быть функцией.

Sub Test()

    If (Not CheckEmpty()) Then
        '// come controls were empty
        Exit Sub
    End If

    MsgBox "do work"
End Sub

Function CheckEmpty() As Boolean

    Dim ctrl As Control
    Dim gotError As Boolean

    '// loop controls, all empty ones are red otherwise they are reset to white
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.ComboBox Or TypeOf ctrl Is MSForms.TextBox Then
            If ctrl.Value = Empty Then
                gotError = True
                ctrl.BackColor = RGB(255, 0, 0)
            Else
                ctrl.BackColor = vbWindowBackground
            End If
        End If
    Next ctrl

    If (gotError) Then MsgBox "Please complete all missing information"

    CheckEmpty = Not gotError
End Function
...