我正在学习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
答案 0 :(得分:3)
Format
是VBA.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操作。
代码完全按照指定的预期运行。