Я новичок в VBA, и я работаю над модулем для чтения данных из электронной таблицы и расчета значений на основе дат из электронной таблицы. Я читаю переменные как String, а затем меняю значения на Date с помощью CDate. Однако я просто столкнулся с DateValue, и мне было интересно, какая разница между этими двумя функциями и какой из них лучше использовать.
Разница между DateValue и CDate в VBA
Ответ 1
 DateValue вернет только дату. CDate сохранит дату и время:
? DateValue("2014-07-24 15:43:06")
24/07/2014
? CDate("2014-07-24 15:43:06")
24/07/2014 15:43:06 
Аналогичным образом вы можете использовать TimeValue для возврата только временной части:
? TimeValue("2014-07-24 15:43:06")
15:43:06 
? TimeValue("2014-07-24 15:43:06") > TimeSerial(12, 0, 0)
True
Кроме того, как говорит guitarthrower, DateValue (и TimeValue) будет принимать только параметры String, а CDate также может обрабатывать числа. Чтобы эмулировать эти функции для числовых типов, используйте CDate(Int(num)) и CDate(num - Int(num)).
Ответ 2
 CDate преобразует число или текст в дату.
CDate(41035) 'Converts to a date of 5/6/2012
CDate("1/15/2014") 'Converts to a date of 1/15/2014
 DateValue преобразует дату в текстовом формате (только) в дату.
DateValue("1/15/2014") 'Converts to a date of 1/15/2014
DateValue(41035) 'Throws a mismatch error
		Ответ 3
Оба CDate и DateValue при использовании в vba преобразуют значение в формат даты (dd/mm/yyyy): 
1) 
  LstrDate = "July 24, 2014" 
  LDate = CDate(LstrDate)
2) 
  LDate = DateValue("July 24, 2014")
Оба возвращают тот же результат.
Однако DateValue возвращает порядковый номер даты, если используется на уровне приложения (электронная таблица)