Format
- это стандартная библиотечная функция VBA, определенная в модуле VBA.Strings
; он возвращает String
представление выражения, которое он дал, отформатированный как указано: нет смысла делать это:
Dim foo As Currency ' a numeric data type...
foo = Format(123, "Currency") ' ...assigned to a string representation of a numeric value
Но здесь это имеет смысл:
Dim msg As String
msg = Format(123, "Currency")
Теперь значение ячейки отличается от ее текстового представления . Не потому, что вы видите $123.00
в ячейке, значение этой ячейки равно $123.00
(String
); это ячейка Text
, но ее Value
вполне может быть 123
(Double
), а NumberFormat
будет $#0.00
.
Вы хотите использовать числовые типы данных для выполнения операций и использовать Format
только тогда, когда вам нужно сделать эти числовые значения «красивыми» для отображения. Избегайте выполнения арифметических операций со строками: хотя может работать, оно также может завершиться с ошибкой, в зависимости от того, как отформатирована строка, и от языкового стандарта системы: VBA необходимо выполнить неявные преобразования типов в выполнять такие операции, и неявные преобразования должны делать ряд (иногда ошибочных) предположений.
При записи числовых значений в ячейки таблицы запишите числовые значения, а не их строковое представление (то же самое для дат. особенно даты на самом деле). Вместо Format
-ing значений укажите строку формата для Range.NumberFormat
в ячейках, которые должны быть отформатированы. Таким образом, Excel по-прежнему будет понимать числовые значения как таковые и все еще сможет правильно выполнять, например, Операции СУММ.
Код работает точно так, как указано и предназначено.