Не хочу красть ответ FaneDurus, но слишком много, чтобы вставить комментарий.
Итак, ваша задача - преобразовать String
в Date
. Date
хранится как число (double) внутри, и у вас есть много возможностей отформатировать его как угодно, вычислить с его помощью и т. Д.
Итак, String
вы получите что-то вроде "2020-05-28T21:13:01.000+0000"
. Важно помнить, что технически это String
, а не Date
. Excel хорошо угадывает дату из строки, но не может творить чудеса, поэтому, чтобы убедиться, что вы находитесь на стороне сохранения, разделите строку самостоятельно, используя String functions
.
Есть много способов сделать Итак, но я думаю, что самый простой способ - использовать команду Split
(как это сделал FaneDuru). Первый шаг - разделить Date и Time часть, вы уже это сделали:
dateTimeParts = Split(date_thing, "T")
Теперь у нас есть массив с 2 элементами, первый ( index = 0) имеет "2020-05-28"
, а второй (index = 1) имеет "21:13:01.000+0000"
. Следующим шагом будет разделение даты на год, месяц и день. Они разделены da sh, поэтому мы используем
Dim dateParts() as string
dateParts = split(dateTimeParts(0), "-")
Теперь у вас есть 3 строки в dateParts
, одна содержит год, одну месяц и одну день. Следующая задача - создать реальный Date
из этих 3 частей, и VBA предоставляет для этого функцию DateSerial
: он создает дату из 3 чисел. Вы можете кормить его тремя строками, которые есть в dateParts
, но это все еще строки. VBA попытается преобразовать их, но лучше записать это в коде - неявное преобразование является источником многих ошибок. Для лучшей читаемости я использую три промежуточные переменные, это дело вкуса, но я предпочитаю не помещать много операций в одну строку. CLng
преобразует String
в Long
:
Dim day as long, month as long, year as long, finalDate as Date
year = CLng(dateParts(0))
month = CLng(dateParts(1))
day = CLng(dateParts(2))
finalDate = dateSerial(year, month, day)
Теперь вы хотите записать дату в ячейку, и она должна отображаться в форме «ДД / ММ / ГГ» . Не конвертируйте драгоценный Date
обратно в строку (как это сделала бы функция Format
). Вместо этого запишите значение даты в ячейку и отформатируйте ячейку так, чтобы дата отображалась так, как вы хотите. Я предполагаю, что ActiveCell
, адаптируйте его к любой ячейке, которая вам нужна, но, пожалуйста, не используйте Select
для установки ActiveCell
).
Activecell.Value = finalDate
Activecell.NumberFormat = "dd/mm/yy"
Таким образом, вы можете изменить формат ячейку позже (например, используйте 4-значную дату) без проблем или измените формат на тот, в котором записывается название дня или месяца. При этом изменяется только способ отображения даты - само значение даты остается неизменным.