Почему 30/9/2013 не происходит сбой IsDate (), если формат системной даты установлен для мм / дд / гггг - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь написать VBA в Excel 2016 для проверки введенных дат в одном столбце. Я использую простое:

If Not IsDate(SourceSheet.Cells(r, c)) Then ...

Если значение в ячейке равно 53/9/2013, функция IsDate () вернет значение False, но если значение равно 30/9/2013, функция IsDate () вернет значение True, что должно быть неверно для дат в формате мм / дд / гггг. Я нахожусь в США, и мои системные форматы даты Windows установлены на мм / дд / гггг.

Как я могу заставить Excel считать 30/9/2013 недействительной датой?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Это должно работать, где r - это ячейка рабочего листа

Function isRealDate(r As Range) As Boolean
    isRealDate = IsDate(r.Value) And IsNumeric(r.Value2)
End Function
0 голосов
/ 01 мая 2018

Как отметил Тим Уильямс: «IsDate () очень простителен». Если это похоже на дату, IsDate () вернет TRUE.

Вы и я можем изучить ячейку, которая выглядит как дата, и определить, является ли она реальной или просто текстовой, нажав Ctrl + ` (то есть Ctrl-тильда) .

Если это константа действительной даты, будет отображаться базовое числовое значение.

Чтобы подтолкнуть VBA к проведению аналогичного теста:

Sub qwerty()
    Dim b1 As Boolean, b2 As Boolean, r As Range
    Set r = ActiveCell
    b1 = IsDate(r.Value2)
    b2 = IsDate(r.Value)
    If b2 Then
        If Not b1 Then
            MsgBox "true date"
        Else
            MsgBox "fake date"
         End If
    Else
        MsgBox "not even close"
    End If

End Sub

Это должно быть допустимо для констант .............. не обязательно для формул.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...