格式化单元格中的值,并将格式化的值发送到Powerpoint

时间:2012-07-30 20:30:13

标签: excel vba excel-vba powerpoint powerpoint-vba

我有这个代码将多个工作簿聚合到一个预览文件中,其中所有数据都清楚地列在表格和图表中。然后将这些表格和图表粘贴到PowerPoint演示文稿中。

当表格中的值被复制到PowerPoint幻灯片时,我遇到了使格式正确的问题。其中一个源工作表输出的值如847389.240398230423,当您尝试将其放在PowerPoint中时,会得到一个占用太多行的值,看起来像2.240398230423E-02。在任何会议中,这种格式都不会很好。

我写了一些代码,这些代码会在值在预览工作簿中编辑代码

Sheets("Output").Select

'Select1
Range("C10:H15").Select
    Selection.NumberFormat = "0.000"

'Select2
Range("C17:H17").Select
    Selection.NumberFormat = "0.000"

'Select3
Range("C18:H19").Select
    Selection.NumberFormat = "0.00"

'Select4
Range("C20:H21").Select
    Selection.NumberFormat = "0.00"

这段代码非常适合我需要的数据,并且显示为0.487,但是单元格中的实际值是0.487682742490,我认为这是代码在更新PowerPoint演示文稿时所识别的内容。

有没有办法可以编写一些代码,只能取小数点后的前2位或3位数,而忽略其他非重要数字?

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标。一种方法是强制格式化/可见数据作为实际值。

例如,假设单元格A1包含值1.234。使用此代码:

ActiveSheet.Range("A1").NumberFormat = "0.0"
ActiveSheet.Range("A2").Value = ActiveSheet.Range("A1").Value
ActiveSheet.Range("A3").Value = ActiveSheet.Range("A1").Text

结果如下:

  • 单元格A1包含值1.234,但显示为1.2
  • 单元格A2包含值1.234,并显示为1.234
  • 单元格A3包含值1.2,并显示为1.2

单元格的.Text属性基本上是您在单元格中看到的。一旦您以这种方式转换价值,转移到PP应该按预期工作。


或者(虽然不是首选,因为它使用起来有些麻烦,需要字符串,而不仅仅是坚持使用值),你可以使用这样的东西:

Dim s As String
Dim dec As Integer

dec = 2
s = CStr(ActiveSheet.Range("A1").Value)
ActiveSheet.Range("A3").Value = CDbl(Left(s, InStr(s, ".")) & Left(Right(s, Len(s) - InStr(s, ".")), dec))

在上文中,您可以通过增加dec的值来扩展小数位数。但是,如果不进行进一步修改,1.000将显示为1(删除可能显着的0)。

如果您使用此方法,您可以保留数值(使用CDbl())或将其保留为字符串,如果您不需要执行任何算术(即只是放入PP)。