Я новичок в 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 возвращает порядковый номер даты, если используется на уровне приложения (электронная таблица)