2015-08-04 4 views
1

У меня есть строка с датой и временем в этом формате «DD.MM.YYYY HH: mm», который я хочу преобразовать в дату (независимо от формата).Преобразование String to Date VBA

Я использую этот тестовый код, и я не могу найти, почему она не работает:

Dim Data1 As String, Data2 As Date  
Data1 = "01.01.2015 01:01" 
Data2 = CDate(Data1) 
+0

Я предполагаю, что должно было быть «01.01. ** 2015 ** 01:01» – Jeeped

+0

да. iv только что отредактировал –

+0

http://superuser.com/questions/793137/how-to-convert-dd-mm-yyyy-date-format-to-yyyy-mm-dd-in-excel-2007 –

ответ

3

Попробуйте получить строку в чем-то ближе к обычному формату 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). Короче говоря, получение даты не всегда достаточно; убедитесь, что это правильная дата.

+0

Спасибо, что работает , –

+0

@PedroGranate - см. Мои изменения и рассуждения. Вы можете сделать неправильные преобразования с помощью первого метода. – Jeeped

+0

Когда данные 1 - «02.01.2015 01:01», правильный выход - 02-янв-2015. Не забывайте, что мой формат «DD.MM.YYYY HH: mm», а не «MM.DD.YYYY HH: mm». –