Access VBA 2016 为空文本框/组合框设置红色边框及关联标签提示问题
解决方案
问题1:无需点击控件直接修改空控件边框颜色
原代码仅为符合条件的空控件注册了获得焦点时的触发逻辑,没有当场执行颜色修改操作,所以只有点击控件获得焦点才会变红。修改逻辑如下:
- 首先确保控件
BorderStyle属性设为实线(值为1),否则边框颜色修改不会生效 - 遍历判断控件为空时,直接调用
HandleFocus函数当场修改边框颜色,不需要等焦点触发
问题2:消息框显示关联标签名称而非控件名
Access中TextBox、ComboBox这类输入控件如果绑定了关联标签,标签对象会存储在控件自身的Controls集合的第0位,直接取ctrl.Controls(0).Caption即可获取标签上显示的文本,额外加一层判断避免控件未绑定标签时抛出异常。
修改后的完整代码
Public Function validateCase() As Boolean Dim ctrl As Control validateCase = True ' 初始默认校验通过 For Each ctrl In Me.Controls If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then ' 先确保边框样式为实线,否则颜色修改不生效 ctrl.BorderStyle = 1 If IsNull(ctrl.Value) Then validateCase = False ' 存在空值,校验不通过 ' 优先取关联标签名称,无标签则 fallback 到控件名 Dim labelName As String On Error Resume Next labelName = ctrl.Controls(0).Caption If Err.Number <> 0 Then labelName = ctrl.Name On Error GoTo 0 MsgBox labelName & " 不能为空" ' 当场修改边框颜色为红色 Call HandleFocus(ctrl, True) ' 绑定焦点事件,失焦时可判断是否恢复颜色 ctrl.OnGotFocus = "=HandleFocus([" & ctrl.Name & "], True)" ctrl.OnLostFocus = "=HandleFocus([" & ctrl.Name & "], False)" End If End If Next ctrl End Function Public Function HandleFocus(ByRef ctrl As Control, ByVal blnFocus As Boolean) If blnFocus = True Then ctrl.BorderColor = RGB(255, 0, 0) Else ' 控件非空时才恢复黑色边框,空的话保持红色 If Not IsNull(ctrl.Value) Then ctrl.BorderColor = RGB(0, 0, 0) End If End If End Function
补充说明
上述代码已经绑定了LostFocus事件,控件输入内容失焦时会自动判断内容是否为空,非空就自动恢复黑色边框,不需要额外加逻辑。
内容的提问来源于stack exchange,提问作者TC WONG
相关产品推荐
相关产品推荐

