Vba 加载演示文稿后初始化Sub

Vba 加载演示文稿后初始化Sub,vba,Vba,我用VBA为PowerPoint设计了一个加载项。幻灯片可以标记,当你做演示时,这些标记的幻灯片会触发一些事情。标记具有特定的形状。因此,现在我想在powerpoint中打开演示文稿时自动阅读所有标记的幻灯片(双击powerpoint文件)。我做到了: 我得到了一个很容易理解的错误。它说,当我打开powerpoint演示文稿时,他们的演示文稿没有处于活动状态。但是在加载和显示演示文稿后,我没有找到一种方法自动调用Init()子函数。您知道我如何完成此任务吗?您需要让外接程序响应应用程序级别的事件

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


我得到了一个很容易理解的错误。它说,当我打开powerpoint演示文稿时,他们的演示文稿没有处于活动状态。但是在加载和显示演示文稿后,我没有找到一种方法自动调用Init()子函数。您知道我如何完成此任务吗?

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

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

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

在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
Sub Auto_Open()
  ...
  Toolbar things
  ...
  Set cPPTObject.PPTEvent = Application
End Sub
Sub Init(pres as Presentation)
Dim oSl as Slide
For Each oSl In pres.Slides
...
Next oSl
End Sub