Функция Excel VBA IsDate допускает ошибки в тексте для даты - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь выполнить вычисления даты в Excel VBA, но я получаю ошибку времени выполнения 13 (несоответствие типов), даже если Excel IsDate () возвращает true.

В Excel у меня есть следующееданныеA2: введите «5/20» отображается как «20 мая»A3: введите «5/20 12:00 р» отображается как «2019/05/20 12:00»A4: введите «5/20 12: 00p», отображается как «5/22 12: 00p»Я проверил, что ячейки A2 и A3 могут отображаться в виде числа вместо даты.Ячейка A4 отображается только как текст / строка, но функция VBA IsDate () по-прежнему передает данные формата A4.

Private Sub Date_Errors()
Dim MyRng As Variant
Set MyRng = ActiveSheet.Range("A2", "A4")
For Each cell In MyRng
    If IsDate(cell) Then ' make sure the cell has a date
        If cell.Value < Date Then
            MsgBox ("Before")
        ElseIf (cell.Value - 1) < Date Then
            MsgBox ("Older")
        End If
    Else
        MsgBox ("Not a date")
    End If
Next
End Sub

MsgBox отображается правильно для ячеек A2 и A3, но ошибка несоответствия возникает в сообщении «ElseIf (ячейка»)..value - 1) "строка.Почему IsDate (ячейка) не ловит это и не падает к остальному?

1 Ответ

2 голосов
/ 21 мая 2019

Из справки Microsoft:

Dim MyVar, MyCheck
MyVar = "04/28/2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "April 28, 2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "13/32/2014"    ' Assign invalid date value.
MyCheck = IsDate(MyVar)    ' Returns False.

MyVar = "04.28.14"    ' Assign valid time value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "04.28.2014"    ' Assign invalid time value.
MyCheck = IsDate(MyVar)    ' Returns False.

Другими словами, он поймает все, что напоминает дату, но на самом деле у вас есть строка, поэтому вы не можете вычесть 1 из строки. Решение?

Dim MyDate As Date
If IsDate(Cell) Then
MyDate = Cell

Затем вы используете MyDate вместо Cell

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