使用VBA检查日期是否在两个日期之间

2024-01-03

因此,我浏览了该网站上的许多问题来回答这个问题,并且我相信我的代码是正确的,但它仍然无法正确验证。但我不明白为什么。

我正在尝试做的事情:

我在 Excel 中使用用户表单。我有一个日期输入框和一个日历选择器。当其中一个发生更改时,另一个也会更新。我试图验证输入框中输入的日期是否是有效日期并且在两年的时间范围内,如果是则更新日历选择器。

Errors:

  1. 如果在输入框中输入了错误的日期,则程序 出错,因为它无法使用无效的日历选择器更新 日期。 (这是一个老错误,因此我进行验证检查)
  2. 如果输入任何有效日期,则不会在“If”语句中正确验证。

例如:

如果我输入 2/18/2016,它应该看到它是一个有效日期,晚于 oldDate,并且比 LateDate 更近。然后使用输入框的值更新日历选择器。但是,使用此代码,它总是重置输入框的值并给出未验证的消息。

Code:

Private Sub weekInput_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim tempDate
    Dim oldDate
    Dim lateDate

    tempDate = weekInput.Value
    oldDate = Date - 365
    lateDate = Date + 365

    'Doing this to try and error check if an invalid date is given. Doesn't work for some reason.
    If IsDate(tempDate) And tempDate > oldDate And tempDate < lateDate Then
        'Find date of that week's Monday
        weekPicker.Value = weekInput.Value
    Else
        weekInput.Value = weekPicker.Value
        MsgBox "Didn't verify"
    End If
End Sub

感谢@RonRosenfeld 在该问题评论中的回答。这是有效的更正代码。添加了代码,如果通过将用户表单上的文本颜色从混合到背景更改为红色来验证日期不验证,还会显示错误消息。

变更说明:

所做的第一个更改是声明变量的类型tempDate, oldDate, and lateDate是。之前,没有声明它们会使它们成为变体。这确保它们被记录为日期类型,因此可以像我试图做的那样进行比较。

So:

Dim tempDate
Dim oldDate
Dim lateDate

Becomes:

Dim tempDate As Date
Dim oldDate As Date
Dim lateDate As Date

第二个变化是移动IsDate()到它自己的If陈述。这是因为如果输入的文本不是日期,则在到达其他文本之前就会导致致命错误If语句,因为它试图将非日期保存到日期类型的变量中。所以tempDate = weekInput.Value became:

If IsDate(weekInput.Value) Then
    tempDate = weekInput.Value
End If

其余部分保持不变。除非我删除了MsgBox并通过添加以下代码行将错误消息的颜色从混合到背景中更改为红色,从而制作出更好、更不显眼的错误消息:

dateError.ForeColor = &H80000004
dateError.ForeColor = &HFF&

Answer:

这是完整的代码:

Private Sub weekInput_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim tempDate As Date
    Dim oldDate As Date
    Dim lateDate As Date

    If IsDate(weekInput.Value) Then
        tempDate = weekInput.Value
    End If

    oldDate = Date - 365
    lateDate = Date + 365

    If tempDate >= oldDate And tempDate <= lateDate Then
        weekPicker.Value = weekInput.Value
        dateError.ForeColor = &H80000004
    Else
        weekInput.Value = weekPicker.Value
        dateError.ForeColor = &HFF&
    End If
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VBA检查日期是否在两个日期之间 的相关文章

随机推荐