检查在EXCEL VBA中输入的日期是否为无法正常工作的日期

5gfr0r5j  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(182)

当我不希望Excel isDate返回true时,它返回true。
比如说

isDate(DateSerial(Month:=6, Day:=40, Year:=1970))

返回True
以及输入了

DateSerial(Month:=6, Day:=40, Year:=1970))

因为单元格中的值导致
10/7/1970
我想要的是用户不能输入6月72日,但限制他“真实的的日期”。我不希望Excel补偿它。
有办法吗?

lf5gs5x2

lf5gs5x21#

dateSerial-function的实现目的就是这样的a-如果你想添加天数或月数,它会很方便。
您可以编写自己的检查例程,将日、月和年作为参数,将其作为参数传递给DateSerial,并检查日、月和年是否等于您传递的参数值。

Function checkValidDate(dd As Long, mm As Long, yyyy As Long) As Boolean
    Dim tmpDate As Date
    On Error Resume Next
    tmpDate = DateSerial(yyyy, mm, dd)
    If Err.Number > 0 Then Exit Function
    On Error GoTo 0
    
    checkValidDate = (Day(tmpDate) = dd And Month(tmpDate) = mm And Year(tmpDate) = yyyy)
End Function

? checkValidDate(0, 0, 0)
False

? checkValidDate(10, 7, 1970)
True

? checkValidDate(40, 6, 1970)
False
nfeuvbwi

nfeuvbwi2#

提取并解析文本date并使用IsDate

PersonNummer = "1111010170"
If IsDate(Format(Right(PersonNummer, 6), "@@\/@@\/@@")) Then
    Debug.Print "OK"
Else
    Debug.Print "Not OK"
End If

相关问题