在我的 PowerPoint VSTO 加载项 (VisualBasic) Application.ActivePresentation 中返回无效的演示文稿

问题描述 投票:0回答:1

我在 Visual Studio 中使用 VisualBasic 创建了一个 PowerPoint VSTO 加载项,我希望能够使用它复制演示文稿的所有幻灯片,并将它们以其原始格式粘贴到我当前活动的演示文稿中。然而,它并不是很好用。

如果我启动 PowerPoint,创建一个新的空演示文稿,然后单击加载项,它不起作用。如果我处于调试模式,我会收到一个运行时错误,告诉我“Presentation(未知成员):对象不存在。”在

destPPT.Windows.Item(1).Activate()
(我第一次尝试使用
destPPT
)。当我继续时,PowerPoint 会打开我想从中复制幻灯片的演示文稿并关闭我激活的幻灯片。

我在 PowerPoint 中找到了两种解决此问题的方法。第一个关闭打开的演示文稿,创建一个新的空演示文稿并再次运行加载项。另一种是修改空演示文稿中的任何内容(如添加一些文本),然后运行加载项。两者似乎都工作正常。

这是我用于此的代码片段

Dim pptApp As Application
Dim destPPT As Presentation
Dim srcPPT As Presentation

pptApp = GetObject([Class]:="PowerPoint.Application")

destPPT = pptApp.ActivePresentation
srcPPT = pptApp.Presentations.Open(srcPath)

srcPPT.Slides.Range().Copy()
destPPT.Windows.Item(1).Activate()
destPPT.Application.CommandBars.ExecuteMso("PasteSourceFormatting")

srcPPT.Close()

我是 Visual Basic 的新手,不知道哪里出了问题,或者我可以用不同的方式做什么,也找不到任何有用的东西。

vb.net powerpoint vsto office-addins powerpoint-addins
1个回答
0
投票

经过更多的调试和测试,我找到了解决方案。我像以前一样创建了一个新的空演示文稿,但随后打开了我想从中复制幻灯片的演示文稿,而不是使用加载项,而是使用通常的方式(文件 -> 打开)。 PowerPoint 现在再次关闭了空的演示文稿,只打开了新的演示文稿。我想如果您在打开另一个演示文稿时没有对其进行任何操作,PowerPoint 只会关闭任何空演示文稿。但问题不在于演示文稿的实际打开,而在于为其打开一个新窗口。

我现在将

Presentations.Open()
WithWindow As MsoTriState
参数更改为
msoFalse
因此 PowerPoint 在没有新窗口的情况下打开演示文稿,它现在可以按预期工作。

我的代码现在看起来像这样:

Dim pptApp As Application
Dim destPPT As Presentation
Dim srcPPT As Presentation

pptApp = GetObject([Class]:="PowerPoint.Application")

destPPT = pptApp.ActivePresentation
srcPPT = pptApp.Presentations.Open(srcPath, WithWindow:=MsoTriState.msoFalse)

srcPPT.Slides.Range().Copy()
'I dont create a new window, therefore the following line is not needed
'destPPT.Windows.Item(1).Activate()
destPPT.Application.CommandBars.ExecuteMso("PasteSourceFormatting")

srcPPT.Close()

编辑:事实证明,我实际上不再需要激活

destPPT
的窗口,因为它是唯一创建的窗口。

© www.soinside.com 2019 - 2024. All rights reserved.