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 多文本框验证控件的主要内容,如果未能解决你的问题,请参考以下文章

Wpf文本框验证控件模板触发文本值

asp.net MVC Razor 文本框控件验证

强制验证 WPF 中的绑定控件

ASP.NET验证控件总结

Access 2016 表单控件验证规则未触发

如何验证复合控件