IsNull组合框

时间:2018-09-11 13:36:37

标签: database ms-access

我正在尝试检查用户是否已填写表单中的所有字段。以下代码适用于所有字段,但是我的多选组合框出现问题。 现在,如果我将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 :(得分:2)

多值组合框的值是一个数组,因此类型不匹配。

使用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

答案 1 :(得分:0)

尝试以下操作:

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中将零长度字符串""连接到值时,它将隐式将该值转换为字符串,此时您可以安全地检查字符串的长度,以确定用户是否输入了/选择一个值。

这种类型的比较可以节省您的验证步骤,并在尝试检查Null值的Len()时正确处理。 Len(Null) = Null不为零,因此您当前的测试可能会出现运行时逻辑错误。

如果控件在屏幕上为“空”,则取决于控件与字段的绑定方式,它的评估结果可能是零长度的字符串或Null,从而在Len()测试中导致不同的结果。 / p>