Events Powerpoint VBA应用程序\u幻灯片开始

Events Powerpoint VBA应用程序\u幻灯片开始,events,vba,powerpoint,Events,Vba,Powerpoint,要在Powerpoint中使用SlideShowBegin事件,必须按以下方式配置类模块: Public WithEvents App As Application Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow) MsgBox "SlideShowBegin" End Sub 然后,在非类模块内部,您必须创建该类型的对象并将应用程序设置为应用程序 Dim X As New Class1

要在Powerpoint中使用SlideShowBegin事件,必须按以下方式配置类模块:

Public WithEvents App As Application

    Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow)
        MsgBox "SlideShowBegin"
    End Sub
然后,在非类模块内部,您必须创建该类型的对象并将应用程序设置为应用程序

Dim X As New Class1

Sub InitializeApp()
Set X.App = Application
End Sub
现在,我唯一的问题是,如果您不在Powerpoint中使用宏菜单手动调用InitializeApp,事件将无法工作。您必须先调用此sub,然后才能在包含此sub的幻灯片开始时调用任何内容

在运行powerpoint之前,如何调用此sub?有更好的方法吗

编辑:


我尝试过使用Class_Initialize,但它只在第一次使用时被调用,或者您使用类似
Dim X的语句作为Class1;X=new Class1

通常事件处理程序作为外接程序的一部分安装,您可以在自动打开子例程中初始化该类,该子例程总是在加载外接程序时运行。如果要在单个演示文稿中包含事件处理程序,使其初始化的一种方法是包含一个形状,当鼠标悬停或单击该形状时,该形状将触发一个宏,该宏将初始化事件处理程序并转到下一张幻灯片。

回答一个旧问题,但我希望我的解决方案可能有助于解决这个问题

对于这个问题的一般建议是使用插件或在幻灯片上放置一些元素,单击或悬停这些元素时执行初始化。这两种方法并不总是可取的,因此我采用以下方法:

在某些模块中:

Dim幻灯片以布尔值形式运行
-----------------------------
子幻灯片放映开始(ByVal Wn作为幻灯片放映窗口)
“您的启动代码
端接头
-----------------------------
公共子幻灯片显示页面更改(ByVal Wn作为幻灯片显示窗口)
如果TypeName(slideShowRunning)=“Empty”或slideShowRunning=False,则
slideShowRunning=True
幻灯片放映
如果结束
端接头
----------------------------
公共子幻灯片显示终止(ByVal Wn作为幻灯片显示窗口)
slideShowRunning=False
端接头

对我来说,这非常有效注意我绝不是vba专家,实际上我可能只有不到50小时的vba编程时间(在powerpoint中可能只有8小时)。所以这可能是一个可怕的解决方案。我不知道,但对我来说它很有效,所以我喜欢与大家分享。

通常事件处理程序是作为外接程序的一部分安装的,您可以在自动打开子例程中初始化该类,该子例程总是在加载外接程序时运行。如果要在单个演示文稿中包含事件处理程序,使其初始化的一种方法是包含一个形状,当鼠标悬停或单击该形状时,该形状将触发一个宏,该宏将初始化事件处理程序并转到下一张幻灯片。您可以将此作为答案发布,因为这就是我最终要做的。对于大多数需要被捕获的事件来说,这很好,但是SlideShowBegin事件呢?我希望在幻灯片放映开始时立即触发代码执行,但此解决方案要求幻灯片放映已经开始,以便触发导致事件被识别的代码。好像是第二十二条军规。