Ошибка времени выполнения 13 Несоответствие типов в моем коде? - PullRequest
1 голос
/ 05 марта 2019

У меня есть даты в разных форматах в столбце.Я пытаюсь конвертировать в формат 11.01.2019.Эти даты приходят из основной части электронных писем, поэтому они представлены в строковом формате.Это мой код, который работает для немногих из них, но не для всех.Я пытаюсь добавить условные требования для всех форматов дат.

enter image description here

Sub ConvertToDate()

  Dim r As Range
  Dim setdate As Range

  Set setdate = Range(Cells(3, 3), Cells(3, 3).End(xlDown))

  With setdate
    .NumberFormat = "dd.mm.yyyy" 
    .Value = .Value
  End With

  For Each r In setdate
      r.Value = CDate(r.Value)
  Next r

End Sub

Ошибка отображается в строке:

r.Value = CDate(r.Value) 

1 Ответ

1 голос
/ 05 марта 2019

Посмотрите на ваши значения с датами в Excel.Если они автоматически выровнены по левому краю, Excel считает их не датами, а строками.На рисунке ниже столбец A и столбец B - это строки, а столбец C - это дата.

enter image description here

Когда к строке применяется r.Value = CDate(r.Value), возникает ошибка несоответствия типов, поскольку VBA не знает, как преобразовать строку в дату.

Чтобы убедиться, что дата отформатирована как дата, а Excel знает, что с ней делать, вам нужно найти способ синтаксического анализа 1-Mar-19 даты.Есть несколько способов сделать это, в зависимости от того, как вы себя чувствуете.Вероятно, проще всего заменить - на / и оставить VBA и Excel, чтобы сделать остальное:

Sub TestMe()
    Dim r As Range        
    For Each r In ThisWorkbook.Worksheets(1).Range("A1:B9")
        r = Replace(r, "-", "/")
        r.NumberFormat = "dd.mm.yyyy"
    Next r
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...