使用.NumberFormat在Excel VBA中格式化小数位数

我将数据从Excel电子表格插入到Word文档中。 有一个值有两个以上的小数位。 我正在使用下面的代码来尝试将其转换为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位小数,但公式栏显示更多。

在这里输入图像说明

并且?Selection.Value 。VBA控制台的即时窗口中的值也显示为89.43448051。 这被粘贴到我的文档。

为什么.NumberFormat函数将其更改为2位小数? 我需要改变什么?

.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 

数字格式只会改变您看到的格式。 无论如何,底层的价值是VARIANT。 尝试使用ROUND()函数以确保只导入2位小数

为什么.NumberFormat函数将其更改为2位小数? 我需要改变什么?

一般来说,你真的不想改变原始基础价值的精确度。 当你这样做的时候,“一分钱一分货”的情况经常会起作用。 特别是在计算和累计税收百分比,利率,批发零售价格等时。

有了这个说法,您可以快速更改底层值的精确度到整个工作簿的显示内容,如下所示。

 ActiveWorkbook.PrecisionAsDisplayed = True 

.PrecisionAsDisplayed属性是Workbook对象的成员。 因此,可以使用ActiveWorkbook属性 , ThisWorkbook属性或Workbooks集合中的命名工作簿来访问它。

警告! 此操作不能撤消。 一旦你截断小数精度到显示的值,你不能得到它回来。

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