Попробуйте получить строку в чем-то ближе к обычному формату EN-US перед преобразованием с CDate
.
Dim Data1 As String, Data2 As Date
Data1 = Replace("01.01.2015 01:01", Chr(46), Chr(47))
Data2 = CDate(Data1)
Debug.Print Data2
FWIW, как правило, не является хорошей идеей, чтобы предоставить образец данных, который производит неоднозначные результаты МДГ и ДМГ форматов. Это может быть проблемой в VBA. Поставляйте данные, которые являются окончательно такими или другими.
Для строк, содержащих неоднозначные данные DMY/MDY, такие как "02.01.2015 01:01"
, это лучший подход.
Dim Data1 As String, Data2 As Date, vDATE As Variant, vTIME As Variant
Data1 = "02.01.2015 01:01"
vTIME = Split(Data1, Chr(32))
vDATE = Split(vTIME(0), Chr(46))
Data2 = DateSerial(vDATE(2), vDATE(1), vDATE(0)) + TimeValue(vTIME(1))
Debug.Print Data2
VBA делает «лучшее предположение» с использованием первого метода и выходит не так, как 01-фев-2015. Второй метод является более окончательным и дает правильный ответ от 02 января-2015 года (при условии, что известен формат даты DMY). Короче говоря, получение даты не всегда достаточно; убедитесь, что это правильная дата.
Я предполагаю, что должно было быть «01.01. ** 2015 ** 01:01» – Jeeped
да. iv только что отредактировал –
http://superuser.com/questions/793137/how-to-convert-dd-mm-yyyy-date-format-to-yyyy-mm-dd-in-excel-2007 –