创建和访问 OLEObject

Creating and Accessing a OLEObject

我有一个 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

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

Method object of object OLEFormat failed

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

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

更新 1

我已经在其他机器上成功 运行 这段代码,所以这个问题可能是环境问题,与我的系统有关,而不是我的方法问题。它也可能与权限相关,类似于 This Post.

更新 2

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

我通过删除注册表中的所有相关键来重置我所有的办公室设置来解决这个问题(As Detailed Here):

HKEY_CURRENT_USER\Software\Microsoft\Office

进一步调查后发现我收到此错误消息的原因是因为我安装了 "OLAP PivotTable Extensions"(link) 添加到 excel,出于某种原因与 "AddOLEObject" 方法冲突。因此,只需删除扩展名的注册表项即可有效地从 excel 中删除扩展名并解决我的问题。当扩展完全卸载时也观察到同样的效果。

HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\OlapPivotTableExtensions2016