感谢@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