创建和访问OLEObject

时间:2016-01-28 00:25:49

标签: vba powerpoint powerpoint-vba powerpoint-2013

我有一个VBA宏,有时需要我使用新的嵌入式Excel电子表格创建新幻灯片,然后编辑该电子表格。此代码的简化版本:

Dim sld As Slide
Dim shp As shape
Dim pptWorkbook As Object

Set sld = ActivePresentation.slides.add(ActivePresentation.slides.Count + 1, ppLayoutBlank)
Set shp = sld.Shapes.AddOLEObject(100, 100, 100, 100, "Excel.Sheet")
DoEvents
If shp.Type = msoEmbeddedOLEObject Then
    'Error thrown here
    Set pptWorkbook = shp.OLEFormat.Object
    pptWorkbook.Sheets(1).Cells(1, 1).value = "Stuff"
End If

运行此代码的大约一半时间会导致错误:

  

对象OLEFormat的方法对象失败

这发生在shp.OLEFormat.Object调用上,我相信这是由于" AddOLEObject"没有及时创建excel对象来提供对属性的访问(但这只是一个假设)。我已经尝试了各种方法通过错误处理和睡眠功能来解决这个问题,但到目前为止,我无法创建新的excel对象并在同一函数中修改其内容而不会产生一些错误。

所以我的问题是:您如何使用VBA在PowerPoint文档中添加新的嵌入式Excel电子表格并在同一函数/子文档中编辑其内容?

更新1

我已成功在其他计算机上运行此代码,因此此问题可能是环境问题,与我的系统有关,而不是我的方法问题。它也可能与权限相关,类似于This Post

更新2

我已重新安装Office,重新启动,以管理员身份运行PowerPoint,并添加了逻辑以解决This post中详述的问题。仍然没有进展,我想知道是否有人可以复制我收到的错误?

1 个答案:

答案 0 :(得分:0)

我通过删除注册表中的所有相关密钥(As Detailed Here)来重置所有办公室设置来修复此问题:

  

HKEY_CURRENT_USER \软件\微软\办公室

经过进一步调查后发现我收到此错误消息的原因是因为我已经安装了“OLAP数据透视表扩展”(link)添加到excel,因为某些原因这与“AddOLEObject”冲突“ 方法。因此,只需删除扩展的注册表项就可以有效地从excel中删除扩展并修复我的问题。完全卸载扩展时也会观察到相同的效果。

  

HKEY_CURRENT_USER \软件\微软\办公室\ EXCEL \加载项\ OlapPivotTableExtensions2016