使用.NumberFormat设置Excel VBA中小数点的格式

使用.NumberFormat设置Excel VBA中小数点的格式,vba,excel,Vba,Excel,我从Excel电子表格将数据插入Word文档。有一个值的小数位数超过2位。我正在使用以下代码尝试将其转换为小数点后2位,并将其粘贴到我的文档中 wdApp.Selection.GoTo what:=-1, Name:="Device_Avail" ''Referring to the total count column in the Device Availability worksheet. Set devAvailRow = shDevAvail.Range("A:A").Find("O

我从Excel电子表格将数据插入Word文档。有一个值的小数位数超过2位。我正在使用以下代码尝试将其转换为小数点后2位,并将其粘贴到我的文档中

 wdApp.Selection.GoTo what:=-1, Name:="Device_Avail"
''Referring to the total count column in the Device Availability worksheet.
Set devAvailRow = shDevAvail.Range("A:A").Find("Overall Totals:",       
After:=Cells(1, 1), searchdirection:=xlPrevious)

''Actual piece to format value to 2 decimal places.
shDevAvail.Cells(devAvailRow.Row, 3).NumberFormat = "0.00"
devAvailPer = shDevAvail.Cells(devAvailRow.Row, 3)
wdApp.Selection.TypeText devAvailPer
该值现在仅显示2位小数,但公式栏显示的要多得多

VBA控制台即时窗口中的选择值也显示为89.43448051。这会被粘贴到我的文档中


为什么
.NumberFormat
函数可以将其更改为小数点后2位?我需要更改什么?

数字格式只更改您看到的格式。 不管怎样,基础值都是可变的。
请尝试使用ROUND()函数,以确保只导入两位小数

.NumberFormat
属性格式化呈现的文本,并且不会更改存储在单元格中的值。您可以使用“Range.Text”获取显示的值:

Range("A1") = 99.12345
Range("A1").NumberFormat = "0.00"
Debug.Print Range("A1").Text   '  > 99.12
Debug.Print Range("A1").Value  '  > 99.12345
为什么.NumberFormat函数可以将其更改为小数点后2位?我需要改变什么

一般来说,您确实不希望更改原始基础值的精度。当你这样做的时候,“失去一分钱”的情景经常会出现;尤其是在计算和合计税收、利率、批发零售加价等百分比时

也就是说,您可以使用以下命令将基础值的精度快速更改为整个工作簿显示的精度

ActiveWorkbook.PrecisionAsDisplayed = True
是该组织的成员。因此,可以使用或中的命名工作簿访问

警告此操作无法撤消。一旦将十进制精度截断为显示的值,就无法将其取回


此选项在Excel选项高级中也可用。计算此工作簿时,请将精度设置为显示的精度。预期会出现类似的警告。

NumberFormat不会更改数字本身。它只影响数字的视觉显示方式。(如果它真的修改了价值,那就太糟糕了,尤其是当你在处理复杂的会计或财务计算时。想象一下会导致什么错误?)看看这里,既然我们在加拿大去掉了一分钱,这是否意味着我们不必担心“一分钱的损失”“情景8)事实上,由于2和7轮向下,3和8轮向上,这更像是‘丢失的一枚镍币’。我们从未丢失过价格中的‘美分’;只是准确支付所说价格的能力。