Я пытаюсь написать немного кода, который будет использовать функцию DateDiff чтобы получить разницу в днях между двумя датами. Затем я буду использовать этот номер, чтобы определить, куда вводить данные в моей электронной таблице.

У меня возникли проблемы с использованием функции DateDiff , поэтому, чтобы попытаться понять, в чем я ошибаюсь, я подошел к тому, чтобы сделать это как можно проще, хотя по-прежнему использовал переменные, но все еще не работал.

У меня проблема в том, что он не дает ответа в течение нескольких дней или ответ не точный. Например, при выполнении кода ниже VBA выдает ответ 24.

Куда я иду не так / что я делаю не так?

 Dim DayValue As Date
 Dim YearStart As Date

 YearStart = DateSerial(Year(2016), Month(1), Day(1))
 DayValue = DateSerial(Year(2016), Month(1), Day(8))
 strong textMsgBox DateDiff("d", DayValue, YearStart)

3 ответа3

2

Вам не нужны функции года, месяца или дня внутри функций DateSerial, и вам нужно переключить порядок аргументов на функцию DateDiff

Попробуй это:

Sub test()
 Dim YearStart As Date

 YearStart = DateSerial(2016, 1, 1)
 DayValue = DateSerial(2016, 1, 8)
 MsgBox DateDiff("d", YearStart, DayValue)
End Sub
2

Заменить:

YearStart = DateSerial(Year(2016), Month(1), Day(1))

с:

YearStart = DateSerial(2016, 1, 1)
1

Вы должны использовать DateSerial(2016, 1, 1)

Использование DateSerial(Year(2016), Month(1), Day(1)) - неправильный подход, он говорит Excel:

  • конвертировать 2016 в дату (поскольку формат даты Excel начинается в 1900 году, 2016 - где-то в 1905 году)
  • получить часть года этой даты (1905)
  • аналогично также с месяцем и днем

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .