Вы получаете 0, потому что между этими значениями есть 0 дней, ПЛЮС, вы никогда не присваиваете функции значение, возвращающее что-либо кроме значения по умолчанию для Long
.
Попробуйте это так:
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Вы все равно получите 0, но в этом примере это то, что вы должны получить. Измените функцию на эту, а затем посмотрите в окне отладки, чтобы убедиться, что даты корректно форматируются:
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
Debug.Print pDate1
Debug.Print pDate2
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Затем протестируйте его, используя значения даты, которые находятся в разные дни, чтобы получить что-то отличное от 0.
Теперь, если вы хотите, чтобы это было более подробно, чем, как вы сказали, в днях, вам нужно вернуть значение, отличное от Long
(может иметь миллисекунды в значениях тоже), и использовать другой аргумент в DateDiff
например:
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = DateDiff("s", pDate1, pDate2)
End Function
Затем преобразуйте количество секунд в число дней, часов, минут и секунд.
Преобразование секунд в дни, часы, минуты исекунд
Если вы не хотите, чтобы порядок имел значение, и всегда получали положительное число, используйте также функцию Abs
(абсолютное значение), например:
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))
End Function