Тип данных Date
основан на типе данных Double
с проверкой диапазона (мин. / Макс. Значения даты) и рассматриваемой эпохой. Другими словами, в этом нет ничего особенного, особенно если учесть, что VBA не является строго типизированным языком.
Если вы думаете о времени в континууме (и IMO, вы должны), тогда Double
хорошо подходит. Точность для чисел с плавающей запятой двойной точности, где один день = 1 (целое число) составляет девять знаков после запятой. Таким образом, значение типа Double
(и, следовательно, типа Date
) может с комфортом вмещать подсекундные значения.
Однако проблема, с которой вы сталкиваетесь, заключается в том, что временные функции в VBA (Now
, DateSerial
, DateDiff
, DateAdd
и т. Д.) Имеют минимальную гранулярность одну секунду . Если вы используете их со значениями даты, хранящимися как Double
с точностью до секунды, вы получите округление до одной секунды. То же самое для пользовательских элементов управления и т. Д. Написано для VBA6.
Вы могли бы написать свою собственную реализацию временных функций, которые вам требуются, конечно (я вспоминаю о необходимости реализации классов-оболочек для StdDataFormat
, чтобы считывать / записывать подсекундные значения SQL Server без округления в MS Data Grid в VBA), но вы начнете чувствовать, что вы катите свой собственный временной тип данных (ой!)