如何获得负片的实际颜色?

时间:2014-07-18 14:04:02

标签: excel vba colors formatting powerpoint

我的一些单元格格式为#,##0;[Red](#,##0),这使得负数显示为红色。我想将内容和格式复制到PowerPoint中。如何识别单元格显示的颜色,以便复制可见外观?我不想重新实现解析格式和做出否定决定的逻辑,如果我不必这样做,因为并非我的所有单元格都会以这种格式进行格式化。

如果我无法通过在VBA中明确设置颜色来执行此操作,是否可以使用复制和粘贴方法将Excel中的单元格复制到PowerPoint中的表格中?实际上这比做手写更好 - 我已经尝试了但是我可以在什么对象嵌套级别上进行粘贴。

我发现有很多关于如何将Excel范围粘贴到新表中的参考文献,但没有找到将格式化为现有PowerPoint表格的单个单元格。在TextRange级别粘贴不粘贴颜色,但它会粘贴其他设置,如粗体。

1 个答案:

答案 0 :(得分:1)

是否可以使用复制和粘贴方法将Excel中的单元格复制到PowerPoint中的表格中?

我认为史蒂夫的建议并不像你所做的那样适用于自定义数字格式。无论如何,当我查询该单元格的.Font.ColorIndex属性(例如)时,返回值为1,即使该数字为负数且显示红色,收益率3

如果不解析格式条件,我不确定这是否可行。无论我尝试过什么,数字格式规则似乎都不会转移到PowerPoint。

然而,这可能是一个可接受的解决方案。将您的数字格式更改为:

#,##0;(#,##0)

然后,如果值为负,则应用条件格式规则以使单元格的文本为红色,而不是使用自定义格式来执行颜色。

针对单个细胞范围给出的示例:

Sub Test()
Dim r As Range
Dim ppt As Object
Dim pres As Object
Dim sld As Object
Dim tbl As Object
Dim tblCell As Object

Set r = [A3]

Set ppt = CreateObject("PowerPoint.Application")
Set pres = ppt.Presentations.Open("c:\presentation.pptx")
Set sld = pres.Slides(1)
Set tbl = sld.Shapes(1) 'Table in PowerPoint
Set tblCell = tbl.Table.Cell(1, 1).Shape 'Cell/shape you paste in to

r.Copy

tblCell.Select

ppt.CommandBars.ExecuteMso "PasteSourceFormatting"

End Sub

或者,将单元格的颜色强制为红色:

Set r = [A3]
If r.Value < 0 Then 
    r.Font.ColorIndex = 3
Else 
    r.Font.ColorIndex = 1
End If