链接到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
答案 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无关。