加载演示后的Init Sub

时间:2014-08-30 14:03:17

标签: vba

我为VBA设计了一个AddIn for PowerPoint。可以标记幻灯片,当您进行演示时,这些标记的幻灯片会触发某些内容。标记具有特定形状。所以现在我想在powerpoint中打开演示文稿时自动读取所有标记的幻灯片(Doubleclick the Powerpoint file)。我做了:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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