我为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的方法。你知道我怎么能做到这一点吗?
答案 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