vba - 在 TabCtl 中的 OnChange 事件之前验证数据输入字段
问题描述
在访问 Access 中的另一个页面之前,我正在尝试验证页面上是否填写了必填字段。
这是我的代码:
Private Sub TabCtlTest_Change()
If MsgBox("Would you like complete the form?", vbYesNo + vbQuestion, "Complete Form") = vbYes Then
If IsFormValidated = False Then
MsgBox "Please fill all mandatory highlighted fields."
End If
'Cancel = True
End If
End Sub
我想在转到另一个页面之前验证必填字段。选项卡控件中有六个页面。一旦我单击另一个页面,现有代码就会验证,但是我想在离开现有页面之前进行验证。
解决方案
不幸的是,没有阻止离开当前标签页的事件。
您需要构建一个自定义流程以将用户带回“无效”页面。
仍然使用该Change
事件,您可以返回上一页。
在模块顶部定义两个辅助变量来存储我们是否有验证错误并已被发回。
Dim ValidationError As Boolean
Dim SentBack As Boolean
页面已更改为下一页后,将触发更改事件。
因此,您将有效地将用户发送回上一页使用
Me.TabCtlTest = Me.TabCtlTest - 1
这将再次触发更改事件,因此我们使用变量ValidationError
来跟踪我们是否已经被代码发回。这将防止无限循环。
Private Sub TabCtlTest_Change()
If SentBack Then
SentBack = False
Exit Sub
End If
If MsgBox("Would you like complete the form?", vbYesNo + vbQuestion, "Complete Form") = vbYes Then
If IsFormValidated = False Then
ValidationError = True
If ValidationError Then
ValidationError = False
SentBack = True
If Me.TabCtlTest = 0 Then
Me.TabCtlTest = Me.TabCtlTest
Else
Me.TabCtlTest = Me.TabCtlTest - 1
End If
End If
MsgBox "Please fill all mandatory highlighted fields."
End If
End If
End Sub
请参阅文档以获取更多信息https://docs.microsoft.com/en-us/office/vba/access/concepts/controls/refer-to-tab-control-objects-in-vba