Ваши проблемы связаны с необъявленными переменными, а также с тем, что VBA ориентируется на использование США в качестве даты, а ваши региональные настройки не соответствуют вашим действиям.
Я подозреваю, что ваши региональные настройки коротких датYMD.
А то, что вы думаете dd
, VBA считает mm
.
Так что, когда значение равно <= 12
, оно преобразуется в YMD
StartDate --> 2003-Dec-19
Если это >12
, это не может быть месяц, поэтому VBA интерпретирует его как день и преобразует его в дату, ориентированную на США.Итак, EndDate --> 2019-Mar-23
Вы должны объявить все переменные, а также при кодировании использовать однозначные даты.
например:
Option Explicit
Sub DateDiffTest()
'OK to use US-centric MDY here
Const StartDate As Date = #3/12/2019#
Const EndDate As Date = #3/23/2019#
Dim Msg As String
Msg = "Days from today: " & DateDiff("d", EndDate, StartDate)
MsgBox Msg
End Sub
Другой способ однозначного объявления дат:
Option Explicit
Sub DateDiffTest()
Dim StartDate As Date
Dim EndDate As Date
Dim Msg As String
StartDate = "2019-Mar-12"
EndDate = "2019-Mar-23"
Msg = "Days from today: " & DateDiff("d", EndDate, StartDate)
MsgBox Msg
End Sub
Кстати, я не понимаю, почему MS делает НЕ требующим объявление переменных по умолчанию.Выберите Tools/Options/Editor
и отметьте Require Variable Declaration
.Это поместит Option Explicit
в начале любого нового модуля.Чтобы исправить этот модуль, введите его вручную в начале.