【问题标题】:Init Sub after loading presentation加载演示文稿后初始化 Sub
【发布时间】:2014-08-31 01:55:36
【问题描述】:

我用 VBA 为 PowerPoint 设计了一个插件。幻灯片可以标记,当您进行演示时,这些标记的幻灯片会触发一些事情。标记具有特定的形状。所以现在我想在 powerpoint 中打开演示文稿时自动阅读所有标记的幻灯片(双击 Powerpoint 文件)。我做到了:

Sub Auto_Open()
  ...
  Toolbar things
  ...
  Call Init()
End Sub

Sub Init()
  For Each oSl In ActivePresentation.Slides
  ...
  Next oSl
End Sub

我收到一个错误,这很容易理解。它说,当我打开 powerpoint 演示文稿时,它们不是活动演示文稿。但是我找不到在加载和显示演示文稿后自动调用我的 Init() Sub 的方法。你知道我是怎么做到的吗?

【问题讨论】:

    标签: vba


    【解决方案1】:

    您需要让您的外接程序响应应用程序级 事件。这并不是非常复杂,但是如果您以前没有这样做过,它可能看起来有点令人生畏。更多信息和示例文件可以在这里找到:

    http://www.pptfaq.com/FAQ00004_Make_your_VBA_code_in_PowerPoint_respond_to_events.htm

    创建一个名为cEventClass 的类模块。除了此过程中命名的事件 (AfterPresentationOpen),您还将看到 PowerPoint 通常不响应的许多其他应用程序级事件。

    将这些代码放在类模块中,该模块将建立事件处理程序对象和一个要运行的过程每次打开任何演示文稿时

    Option Explicit
    Public WithEvents PPTEvent As Application
    
    Private Sub PPTEvent_AfterPresentationOpen(ByVal pres As Presentation)
        Call Init(pres)
    End Sub
    

    在 PPAM 的标准模块中,您需要实例化该事件处理程序:

    Public cPPTObject As New cEventClass
    

    在您的Auto_Open 过程中,确保分配给事件处理程序并且不要尝试调用Init 过程。 Init 过程将从上面名为 AfterPresentationOpen 的事件中调用!

    Sub Auto_Open()
      ...
      Toolbar things
      ...
      Set cPPTObject.PPTEvent = Application
    End Sub
    

    我还将更改您的 Init 程序以要求将演示文稿作为参数:

    Sub Init(pres as Presentation)
    Dim oSl as Slide
    For Each oSl In pres.Slides
    ...
    Next oSl
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多