Excel 用户表单下一步按钮不可用';如果语句验证检查失败并提示msgbox,则无法工作
我有一个带有“下一步”按钮的用户表单。在下一个单击子部分中,我有一个很长的if语句,它检查每个字段的完整性和有效数据 默认情况下,有两个日期框包含今天的日期,以向用户显示必要的日期格式。但由于它是预先填充的,我认为人们可能会忘记输入正确的日期,因此,如果在单击下一步按钮时该日期仍然是今天的日期,则会弹出一个msgbox,询问用户是否希望该日期是今天的日期 这个想法是,如果用户说不,那么他们可以返回并更改日期,然后当他们再次单击“下一步”时,相同的验证检查语句是否将运行,然后他们可以进入下一页。如果他们说是的,那么它应该继续进行其余的验证检查并进入下一页 但这就像msgbox的弹出阻止了用户表单切换到下一个页面(实际上是一个单独的用户表单,因为我这样做的时候不知道多页面的事情)。我尝试将无效数据放入另一个文本框,当我的msgbox弹出告诉我重新输入数据时,我可以输入数据,然后转到下一页。我猜我的约会文本框有问题。我已经在下面粘贴了所有适用于下一个单击子菜单中日期文本框的内容 编辑:我还应该提到,如果我输入的日期不是今天,则“下一步”按钮可以正常工作Excel 用户表单下一步按钮不可用';如果语句验证检查失败并提示msgbox,则无法工作,excel,vba,button,textbox,userform,Excel,Vba,Button,Textbox,Userform,我有一个带有“下一步”按钮的用户表单。在下一个单击子部分中,我有一个很长的if语句,它检查每个字段的完整性和有效数据 默认情况下,有两个日期框包含今天的日期,以向用户显示必要的日期格式。但由于它是预先填充的,我认为人们可能会忘记输入正确的日期,因此,如果在单击下一步按钮时该日期仍然是今天的日期,则会弹出一个msgbox,询问用户是否希望该日期是今天的日期 这个想法是,如果用户说不,那么他们可以返回并更改日期,然后当他们再次单击“下一步”时,相同的验证检查语句是否将运行,然后他们可以进入下一页。如
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,但在我确定日期后,“下一步”按钮不起作用。如果我单击Yes,就好像它在读取第17行后停止读取代码一样。关于让它读取其余代码的任何建议?那些
ElseIf
块和最后的Else
块是互斥的-如果执行任何其他块,最后的Else
块不会运行。因此,您不需要最后的Else
,如果if
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