对userform文本框条目的测试失败

时间:2018-01-23 18:57:26

标签: excel excel-vba userform vba

我有一个带有文本框txtTF1 - txtTF30的用户表单,其中奇数是开始日期,偶数是结束日期。我正在使用日历日期选择器和(正确运行)逻辑测试来帮助确保输入是日期。我还想对输入进行逻辑测试,以确保我没有重叠日期。

下面的代码正确地显示日期重叠,直到它遇到有意留空的文本框。表单初始化时,这些空格设置为vbnullstring。此时某事触发了消息框,说明在最后一组日期中存在重叠,即使我看不到这一点。

Debug.Print显示userform中的最后一组日期未加载到变量中。

我不确定此测试在何处/如何发生故障。有什么想法吗?

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

1 个答案:

答案 0 :(得分:0)

我在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