Струны VBA без знаков доллара - PullRequest
0 голосов
/ 24 января 2019

Я изучаю VBA, и я заметил странную причуду, когда VBA взаимодействует с добавлением строк. Когда вы берете две версии кода (замените закомментированные части с помощью заменимых здесь закомментированных частей), одна выводит строку со знаком доллара, а другая - без. Кто-нибудь знает, если это ошибка или планируется обновление?

Option Explicit
Sub CalcCost()
Dim curSalesPrice As Currency
Dim curTotalCost As Currency
Dim sngSalesTax As Single
Dim strMessage As String

 curSalesPrice = 35
 sngSalesTax = 0.085

    Range("A1:B8").ClearContents
    Range("A1").Value = "The cost of the calculator"
    Range("A4").Value = "Price"
    Range("B4").Value = curSalesPrice
    Range("A5").Value = "SalesTax"
    Range("A6").Value = "Cost"
    Range("B5").Value = curSalesPrice * sngSalesTax

    'curTotalCost = curSalesPrice + (curSalesPrice * sngSalesTax)
    curTotalCost = Format(curSalesPrice + (curSalesPrice * sngSalesTax), "Currency") 'swap here


    'strMessage = "The calculator total is " & Format(curTotalCost, "Currency")
    strMessage = "The calculator total is " & curTotalCost 'swap here

    Range("A8").Value = strMessage
    Range("B6").Value = curTotalCost

End Sub

1 Ответ

0 голосов
/ 24 января 2019

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 по-прежнему будет понимать числовые значения как таковые и все еще сможет правильно выполнять, например, Операции СУММ.

Код работает точно так, как указано и предназначено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...