没有美元符号的VBA字符串

时间:2019-01-24 18:24:52

标签: excel vba

我正在学习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 :(得分:3)

FormatVBA.Strings模块中定义的VBA标准库函数;它返回给定表达式的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的情况,该单元格的 value $123.00(一个String);那是单元格的Text,但它的Value可以很好地为123(一个Double),其NumberFormat可以为$#0.00

您要使用数字数据类型执行操作,并且仅在需要将这些数字值设为“漂亮”以便显示时才使用Format。避免对字符串进行算术运算:虽然 可能起作用,但可能也失败,具体取决于字符串的格式设置和系统区域设置:VBA需要使隐式类型进行此类操作的转换,以及隐式转换需要做出许多(有时是错误的)假设。

将数字值写入工作表单元格时,请写入数字值,而不是它们的字符串表示形式(与日期相同。实际上,尤其是日期)。代替Format设置值,在需要格式化的单元格中为Range.NumberFormat指定格式字符串。这样Excel将仍然能够理解数值,并且仍然可以正确执行例如SUM操作。

代码完全按照指定的预期运行。