【问题标题】:Powerpoint Event handling - Prevent New PresentationPowerpoint 事件处理 - 防止新的演示文稿
【发布时间】:2013-04-18 14:36:09
【问题描述】:

我正在创建一个 Powerpoint 插件。我想限制用户:

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

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

在我的班级模块中,我有以下内容来捕获NewPresentation 事件。这工作正常,我收到消息框,Pres 是一个有效的 Presentation 对象,可以传递给 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

我收到以下错误。

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

【问题讨论】:

    标签: vba add-in powerpoint


    【解决方案1】:

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

    Private Sub PPApp_AfterNewPresentation(ByVal Pres As Presentation)
    

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

    【讨论】:

      【解决方案2】:

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

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

      解决这个问题的一种方法:

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

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

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

      【讨论】:

      • 好的,谢谢!这种解释是有道理的。 KazJaw 的上述解决方案似乎更易于实施,并且目前运行良好。
      • 很高兴知道。谢谢你们俩。
      【解决方案3】:

      在 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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-05
        • 2016-05-10
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        相关资源
        最近更新 更多