2013-04-18 79 views
2

我正在创建一个Powerpoint插件。我想无论从限制用户:Powerpoint事件处理 - 防止新演示

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

我已经使用this tutorial/overview套住NewPresentationPresentationOpen事件。我想在用户可以与之交互之前关闭通过这些事件初始化的任何演示文稿。当我尝试使用.Close方法关闭它时,我收到一个错误(下面的截图)。

在我的班级模块中,我有以下几项来捕获NewPresentation事件。这工作正常,我收到消息框Pres是一个有效的演示对象,可以传递到CloseNewPres例程。

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 

我收到以下错误。

Screenshot of error message

上为什么发生这种情况有什么想法?或者我能做些什么来关闭这些演示文稿?

回答

3

在我看来,你需要使用另一个事件,非常类似于一个你使用:

Private Sub PPApp_AfterNewPresentation(ByVal Pres As Presentation) 

如果我提出内一个真的关闭新创建演示文稿设置Pres.Close

+0

完美!这对我有用。 –

1

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

顺便说一下,从事件处理程序中调用另一个例程并让IT执行事件,因为事件处理程序仍处于活动状态。

解决方法之一:

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

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

是的。看起来很奇怪。但它的工作。

+0

好的谢谢!这个解释是有道理的。上述KazJaw的解决方案似乎更容易实现,现在正在适当工作。 –

+0

很高兴知道。感谢你们俩。 –

相关问题