用户窗体文本框条目测试失败
Test on userform textbox entry is failing
我有一个带有文本框 txtTF1 – txtTF30 的用户表单,其中奇数是开始日期,偶数是结束日期。我正在使用日历日期选择器和(正确运行的)逻辑测试来帮助确保输入是日期。我还想对输入进行逻辑测试,以确保我没有重叠的日期。
下面的代码正确地发现了日期重叠,直到遇到故意留空的文本框。当表单初始化时,这些空白被设置为 vbnullstring。在这一点上,有些东西触发了消息框,说在倒数第二组日期上存在重叠,即使我看到那不是真的。
Debug.Print 显示用户窗体中的最后一组日期未加载到变量中。
我不确定 where/how 这个测试失败了。有什么想法吗?
Sub OverlapCheck
Dim i as Long
Dim CheckDate1
Dim CheckDate2
Dim CheckDate3
For i = 2 To 28 Step 2
CheckDate1 = Controls("txtTF" & i).value
CheckDate2 = Controls("txtTF" & (i + 1)).value
CheckDate3 = Controls("txtTF" & (i - 1)).value
‘stop test if next date is blank
If Not IsDate(CheckDate2) Then Exit For
‘if a valid date range is entered then check to see if the next date is an overlap
If IsDate(CheckDate1) And IsDate(CheckDate3) Then
If CheckDate1 >= CheckDate2 Then
MsgBox ("Dates " & CheckDate1 & " and" & CheckDate2 & " overlap"), vbOKOnly
frmRLVL.Show
End If
End If
Next
End Sub
我通过在 for/next 语句中添加 CDate() 来实现这一点。我仍然不确定为什么当输入数据在 2>i>28 处结束时,这会使它在最后一组日期工作。在这一点上,我称之为胜利。
For i = 2 To 28 Step 2
CheckDate1 = Controls("txtTF" & i).value
CheckDate2 = Controls("txtTF" & (i - 1)).value
CheckDate3 = Controls("txtTF" & (i + 1)).value
If Not IsDate(CheckDate3) Then Exit For
If IsDate(CheckDate1) And IsDate(CheckDate2) Then
CheckDate1 = CDate(CheckDate1)
CheckDate2 = CDate(CheckDate2)
CheckDate3 = CDate(CheckDate3)
If CheckDate1 >= CheckDate3 Then
MsgBox ("Dates " & CheckDate1 & " and" & CheckDate3 & " overlap"), vbOKOnly
frmRLVL.Show
End If
End If
Next
我有一个带有文本框 txtTF1 – txtTF30 的用户表单,其中奇数是开始日期,偶数是结束日期。我正在使用日历日期选择器和(正确运行的)逻辑测试来帮助确保输入是日期。我还想对输入进行逻辑测试,以确保我没有重叠的日期。
下面的代码正确地发现了日期重叠,直到遇到故意留空的文本框。当表单初始化时,这些空白被设置为 vbnullstring。在这一点上,有些东西触发了消息框,说在倒数第二组日期上存在重叠,即使我看到那不是真的。
Debug.Print 显示用户窗体中的最后一组日期未加载到变量中。
我不确定 where/how 这个测试失败了。有什么想法吗?
Sub OverlapCheck
Dim i as Long
Dim CheckDate1
Dim CheckDate2
Dim CheckDate3
For i = 2 To 28 Step 2
CheckDate1 = Controls("txtTF" & i).value
CheckDate2 = Controls("txtTF" & (i + 1)).value
CheckDate3 = Controls("txtTF" & (i - 1)).value
‘stop test if next date is blank
If Not IsDate(CheckDate2) Then Exit For
‘if a valid date range is entered then check to see if the next date is an overlap
If IsDate(CheckDate1) And IsDate(CheckDate3) Then
If CheckDate1 >= CheckDate2 Then
MsgBox ("Dates " & CheckDate1 & " and" & CheckDate2 & " overlap"), vbOKOnly
frmRLVL.Show
End If
End If
Next
End Sub
我通过在 for/next 语句中添加 CDate() 来实现这一点。我仍然不确定为什么当输入数据在 2>i>28 处结束时,这会使它在最后一组日期工作。在这一点上,我称之为胜利。
For i = 2 To 28 Step 2
CheckDate1 = Controls("txtTF" & i).value
CheckDate2 = Controls("txtTF" & (i - 1)).value
CheckDate3 = Controls("txtTF" & (i + 1)).value
If Not IsDate(CheckDate3) Then Exit For
If IsDate(CheckDate1) And IsDate(CheckDate2) Then
CheckDate1 = CDate(CheckDate1)
CheckDate2 = CDate(CheckDate2)
CheckDate3 = CDate(CheckDate3)
If CheckDate1 >= CheckDate3 Then
MsgBox ("Dates " & CheckDate1 & " and" & CheckDate3 & " overlap"), vbOKOnly
frmRLVL.Show
End If
End If
Next