IsNull ComboBox - PullRequest
       1

IsNull ComboBox

0 голосов
/ 11 сентября 2018

Я пытаюсь проверить, заполнил ли пользователь все поля в моей форме. Следующий код работает для всех полей, но у меня возникают проблемы с моими комбинированными списками. Теперь, если я оставлю поле comboBox пустым, следующий код будет работать отлично и отправит цвет bg на красный. Но если я действительно выберу что-то хорошо, то получаю ошибку несоответствия в следующей строке .. Если IsNull (ctrl) или Len (ctrl) = 0, то

Private Sub AddEmployee_Click()
    If CheckForEmpty = False Then
        MsgBox "Please fill in red boxes"
    Else

    End If
End Sub

Function CheckForEmpty() As Boolean
    CheckForEmpty = True
    ClearControlFormatting

    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If ctrl.Tag = "FILL" Then
            If IsNull(ctrl) Or Len(ctrl) = 0 Then
                ctrl.BackColor = vbRed
                CheckForEmpty = False
            End If
        End If
    Next
End Function

Sub ClearControlFormatting()
    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If ctrl.Tag = "FILL" Then
            ctrl.BackColor = vbWhite
        End If
    Next    
End Sub

Private Sub Form_Current()
    ClearControlFormatting    
End Sub

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Значением многозначного поля со списком является массив, следовательно, несоответствие типов.

Используйте IsArray, чтобы проверить, установлено ли оно:

Function CheckForEmpty() As Boolean
    CheckForEmpty = True
    ClearControlFormatting

    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If ctrl.Tag = "FILL" Then
            If Not IsArray(ctrl) Then
                If IsNull(ctrl) OR Len(ctrl.Value) = 0 Then
                    ctrl.BackColor = vbRed
                    CheckForEmpty = False         
                End If
            End If
        End If
    Next
End Function
0 голосов
/ 11 сентября 2018

Попробуйте следующее:

Dim ctrl As Control
For Each ctrl In Me.Controls
    If ctrl.Tag = "FILL" Then
        If Len(ctrl.Value & "") = 0 Then
            ctrl.BackColor = vbRed
            CheckForEmpty = False
        End If
    End If
Next ctrl

Когда вы объединяете строку нулевой длины "" в значение в VBA, оно неявно преобразует это значение в строку, после чего вы можете безопасно проверить длину строки, чтобы определить, введен ли пользователь / выбран значение.

Этот тип сравнения сохраняет шаг в вашей проверке и корректно обрабатывает, когда вы пытаетесь проверить Len() нулевого значения. Len(Null) = Null НЕ ноль, поэтому в вашем текущем тесте есть вероятность логической ошибки времени выполнения.

Если элемент управления «пустой» на экране, в зависимости от того, как он связан с полем, он может быть оценен как строка нулевой длины или как ноль, что приведет к различным результатам в вашем Len() тесте.

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