当 if 语句验证检查失败并提示 msgbox 时,Userform Next 按钮不起作用

Userform Next button doesn't work when if-statement validation check fails and prompts a msgbox

我有一个带有“下一步”按钮的用户表单。在 Next_Click 子中,我有一个很长的 if 语句,用于检查每个字段的完整性和有效数据。

默认情况下,有两个日期框包含今天的日期,以向用户显示必要的日期格式。但是由于它是预先填写的,我认为人们可能会忘记输入正确的日期,所以如果单击“下一步”按钮时日期仍然是今天的日期,则会弹出一个消息框,询问用户是否打算将日期设为今天的日期.

想法是,如果用户拒绝,那么他们可以返回并更改日期,然后当他们再次单击“下一步”时,相同的验证检查 if 语句将 运行 然后他们可以继续下一页。如果他们同意,那么它应该继续进行其余的验证检查并转到下一页。

但这就像弹出的消息框阻止了用户窗体切换到下一页(实际上是一个单独的用户窗体,因为我这样做时不知道多页的事情)。我尝试将无效数据放入另一个文本框,当我的消息框弹出告诉我重新输入数据时,我能够输入数据然后转到下一页。所以我猜我的日期文本框有问题。我已将适用于 Next_Click 子中的日期文本框的所有内容粘贴在下面。

编辑:我还应该提到,如果我输入的日期不是今天,“下一步”按钮就可以正常工作。

1     Private Sub IB_Next_Click()
2     'Data validation
3                 
4             ElseIf Me.IB_LoanDate.Value = "" Then
5                 blahAnswer = MsgBox("Please enter a loan date.")
6                 Me.IB_LoanDate.SetFocus
7                 Exit Sub
8             ElseIf IsDate(Me.IB_LoanDate.Value) = False Then
9                 blahAnswer = MsgBox("Please enter a valid date.", , "Invalid Entry")
10                Me.IB_LoanDate.SetFocus
11                 Exit Sub
12            ElseIf CDate(Me.IB_LoanDate.Value) = VBA.Date Then
13                loanDateAnswer = MsgBox("The loan date is still set to the default of today's date. Was that intentional?", vbYesNo, "Validation Check")
14                    If loanDateAnswer = vbNo Then
15                        Me.IB_LoanDate.SetFocus
16                        Exit Sub
17                    End If
18            ...
19            Else
20            ...
21            LoanWiz_IB.Hide
22            LoanWiz_IntTerms.Show
23        End If
24    End Sub

如果我单击“否”,它会像预期的那样退出 Sub,但是在我确定日期后“下一步”按钮不起作用。如果我单击“是”,就好像它在读取第 17 行后停止读取代码。关于让它读取其余代码的任何建议?

那些 ElseIf 块和最后的 Else 块是互斥的 - 最后一个 Else 块不会 运行 如果任何其他块执行。所以你不需要最后的 Else,如果 If

HideShow 行应该在外面
 Private Sub IB_Next_Click()
 'Data validation

          ElseIf Me.IB_LoanDate.Value = "" Then
              blahAnswer = MsgBox("Please enter a loan date.")
              Me.IB_LoanDate.SetFocus
             Exit Sub
         ElseIf IsDate(Me.IB_LoanDate.Value) = False Then
             blahAnswer = MsgBox("Please enter a valid date.", , "Invalid Entry")
            Me.IB_LoanDate.SetFocus
             Exit Sub
        ElseIf CDate(Me.IB_LoanDate.Value) = VBA.Date Then
            loanDateAnswer = MsgBox( _
         "The loan date is still set to the default of today's date. Was that intentional?", _
          vbYesNo, "Validation Check")
            If loanDateAnswer = vbNo Then
                Me.IB_LoanDate.SetFocus
                Exit Sub
            End If
        ...
        End If
        ...
        LoanWiz_IB.Hide
        LoanWiz_IntTerms.Show

End Sub