VBA 多文本框验证控件
Posted
技术标签:
【中文标题】VBA 多文本框验证控件【英文标题】:VBA Multiple Textboxes Validation control 【发布时间】:2021-10-11 02:00:28 【问题描述】:亲爱的,
我正在准备一个简单的用户表单,让老师在课堂上输入每个学生的姓名和身高。有两个文本框(textbox_name 和 textbox_height)和一个“添加到记录”命令按钮。我试图进行一些验证控制以防止输入空字符串。我的验证控件是在文本框为空的情况下,当点击“添加到记录”按钮时,对应的空文本框变成粉红色;当两个文本框都为空时,两个文本框都应该变成粉红色,但是在我下面的代码中只有第一个文本框变成粉红色。你能告诉我为什么以及如何纠正它吗?谢谢。
Private Sub Cmd_addtorecord_Click()
If TextBox_Name = "" Then
TextBox_Name.BackColor = rgbPink
Exit Sub
End If
If TextBox_height = "" Then
TextBox_height.BackColor = rgbPink
Exit Sub
End If
'....
End sub
【问题讨论】:
你Exit Sub
如果第一个文本框是空的,所以当第一个文本框为空时你永远不会检查第二个
是的,我同意。你能建议如何改进它吗?谢谢。
【参考方案1】:
你可以这样做:
Private Sub Cmd_addtorecord_Click()
'ensure required fields have content
If FlagEmpty(Array(TextBox_Name, TextBox_height)) > 0 Then
MsgBox "One or more required values are missing", vbExclamation
Exit Sub
End If
'....
End Sub
'check required textboxes for content, and flag if empty
' return number of empty textboxes
Function FlagEmpty(arrControls) As Long
Dim i As Long, numEmpty As Long, clr As Long
For i = LBound(arrControls) To UBound(arrControls)
With arrControls(i)
clr = IIf(Len(Trim(.Value)) > 0, vbWhite, rgbPink)
.BackColor = clr
If clr = rngpink Then numEmpty = numEmpty + 1
End With
Loop
FlagEmpty = numEmpty
End Function
【讨论】:
是的,我已经尝试过您的回答。非常感谢!【参考方案2】:在进入第二个文本框之前,您将退出 sub。将您的代码更改为以下内容:
Private Sub Cmd_addtorecord_Click()
If TextBox_Name = "" or TextBox_height = "" Then
If TextBox_Name = "" Then
TextBox_Name.BackColor = rgbPink
End If
If TextBox_height = "" Then
TextBox_height.BackColor = rgbPink
End If
Exit Sub
End If
'....
End sub
【讨论】:
以上是关于VBA 多文本框验证控件的主要内容,如果未能解决你的问题,请参考以下文章