Итак, решение.
1. Calc
Ячейка будет содержать текст следующего вида: 09.12.2021 13:46:51
Объяснение. Метод
setFormula имеет параметр типа String. Соответственно, Basic преобразует значение, полученное от функции Now, в текст. Преобразование производится, как мы уже говорили, с учетом локализации. В свою очередь, Calc полученный текст присваивает без дополнительного анализа, поскольку ячейка имеет текстовый формат.
2. Excel
Ячейка будет содержать текст следующего вида: 12/9/2021 1:46:51 PM
Ответ является неожиданным даже для некоторых специалистов по Excel.
Объяснение. Свойство
Range.Formula имеет тип Variant. Поэтому VBA передает для присвоения свойству значение типа Variant/Date, поскольку Now dозвращает значение типа Date. Далее вступает в игру Excel. Так как ячейка имеет текстовый формат, то полученное значение типа Variant/Date преобразуется в текст в соответствии с локализацией en_US, поскольку Excel "внутри" работает в соответствии с этой локализацией (как и Calc).
A что изменится, если выделенная ячейка будет иметь общий формат?
1. Calc
Basic передаст методу setFormula тот же текст, что и в ранее разобранном случае. Calc произведет анализ текста с точки зрения возможности преобразования в число или дату в соответствии с локализацией en_US. Поскольку это не возможно, в ячейку будет занесен полученный текст, формат ячейки преобразован в текстовый.
2. Excel
Получив значение типа Variant/Date Excel преобразует его в число занесет в ячейку. Локализованный числовой формат ячейки будет ДД.ММ.ГГГГ ч:мм (в сооответствии региональными установками Windows).
Для самостоятельного разбора предлагается разобрать ситуации, когда производится присвоение свойства FormulaLocal (Calc и Excel).
Если задача кому-то показалась интересной, то дайте мне знать, и мы продолжим спецсеминар.
