OLEObjects和图表之间的区别

时间:2018-12-24 11:08:14

标签: vba powerpoint

链接到Excel的图表和OLEObject之间有什么区别?我以为OLE =对象链接和嵌入。我的图表(我认为是一个对象)已链接,因此它不是OLEObject吗?在PPT中,一个标记为图表,另一个(OLEObject)标记为对象。我很困惑。

此外,行MsgBox sh.OLEFormat.Object.Count产生

  

错误430

而不是在我的PPT演示文稿中返回OLEObject的数量。为什么

 For Each Sl In pp.Slides
    For Each sh In Sl.Shapes
        If sh.Type = msoLinkedOLEObject Then
           MsgBox sh.OLEFormat.Object.Count
        End If
     Next sh
 Next Sl

2 个答案:

答案 0 :(得分:0)

在早期版本的Microsoft Office(2007和更早版本)中,图表实际上是基于Excel图表引擎的OLE对象。为了使用早期绑定,需要引用Excel对象模型。

从Office 2010开始,随着Microsoft Office套件中新图表和图形引擎的引入,使用图表的方式发生了显着变化。其中,图表对象模型已“导入”到各种Office应用程序的对象模型中,从而不再需要引用外部库以使用图表功能。 Office应用程序对象模型现在还具有一个Chart对象。

所有情况都是如此,即使仍然可以通过Excel应用程序界面完成图表的创建和操作。 (实际上,自动化图表时,(不再)无法隐藏 Excel应用程序。)

因此,就Office应用程序而言,Excel图表现在(长达8年以上)是其对象模型的“本机”部分,不再是OLE对象。

sh.OLEFormat.Object.Count

返回错误,因为单个对象没有Count属性。该代码仅在单个Count对象上不对Shapes的集合查询Shape。您需要一个变量来累加循环遇到msoLinkedOLEObject的次数(类似于i = i + 1)。

答案 1 :(得分:0)

Dim x as Long 
Dim y as Long
For Each Sl In pp.Slides
    For Each sh In Sl.Shapes
        If sh.Type = msoLinkedOLEObject Then
           x = x + 1
        End If
     Next sh
     ' Show how many OLE objects on this slide
     MsgBox Cstr(x) & " OLE objects on Slide " & Cstr(Sl.SlideIndex)
     y = y + x
 Next Sl
 ' Show total OLE objects in presentation
 MsgBox Cstr(y) & " OLE objects in presentation"

如果要计算嵌入式(类型为msoEmbeddedOLEObject)以及链接的图表,则需要调整代码。而且正如Cindy所指出的那样,这些图表可能是“ PowerPoint本机”图表(类型为msoChart),与Excel无关。