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