2

我正在创建一个 Powerpoint 加载项。我想限制用户:

  • 创建新演示文稿
  • 打开现有演示文稿

我已经使用本教程/概述来捕获NewPresentationPresentationOpen事件。我想在用户与之交互之前关闭通过这些事件初始化的任何演示文稿。当我尝试使用关闭它时.Close方法关闭它时,我收到一个错误(下面的屏幕截图)。

在我的课堂模块中,我有以下内容来捕获NewPresentation事件。这工作正常,我收到消息框并且Pres是可以传递给CloseNewPres例程的有效 Presentation 对象。

Private Sub PPTEvent_NewPresentation(ByVal Pres As Presentation)
MsgBox "You cannot use this Charting tool with multiple presentations.", vbInformation
CloseNewPres Pres
End Sub

在一个标准模块中,我有一个CloseNewPres例程,我希望关闭“新”演示文稿:

Sub CloseNewPres(Pres As Presentation)
    Application.Presentations(Pres.Name).Close
    'Pres.Close '<~~ This also fails.'
End Sub

我收到以下错误。

错误信息截图

关于为什么会发生这种情况的任何想法?或者我可以做些什么来关闭这些演示文稿?

4

3 回答 3

3

在我看来,您需要使用另一个与您使用的事件非常相似的事件:

Private Sub PPApp_AfterNewPresentation(ByVal Pres As Presentation)

如果我设置Pres.Close在建议的范围内,它真的会关闭新创建的演示文稿。

于 2013-04-18T14:49:59.080 回答
1

我有最好的解释(这是我自己的解释)是它在吠叫,因为您试图在事件处理程序处理它时删除一个对象(演示文稿)。有点要求事件处理程序从自己的脚下拉出地毯。

顺便说一句,从事件处理程序中调用另一个例程并让 IT 执行操作是行不通的,因为事件处理程序仍然处于活动状态。

一种解决方法:

让事件处理程序以无模式方式加载表单。当您这样做时,事件处理程序中的剩余代码将运行完成。如果满足您的条件,表单的初始化代码可以关闭演示文稿。

表单不需要变得可见就可以工作。

是的。看起来很奇怪。但它有效。

于 2013-04-18T14:48:24.247 回答
1

在 C#.Net 中,您可以这样做,

using pp = Microsoft.Office.Interop.PowerPoint;

pp.Application app = Globals.ThisAddIn.Application;
app.AfterNewPresentation += Event_PresNew;

public void Event_PresNew(pp.Presentation pres)
{
//.....your code here....
}

您还可以在下面看到您可以在 powerpoint 中使用的所有事件的列表, https://docs.microsoft.com/en-us/office/vba/api/powerpoint.application.newpresentation(even)

于 2018-11-21T10:09:58.103 回答