首页 > 解决方案 > 在 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

我想在转到另一个页面之前验证必填字段。选项卡控件中有六个页面。一旦我单击另一个页面,现有代码就会验证,但是我想在离开现有页面之前进行验证。

标签: vbams-access

解决方案


不幸的是,没有阻止离开当前标签页的事件。

您需要构建一个自定义流程以将用户带回“无效”页面。

仍然使用该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


推荐阅读