当 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
,Hide
和 Show
行应该在外面
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
我有一个带有“下一步”按钮的用户表单。在 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
Hide
和 Show
行应该在外面
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