6

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

Public WithEvents App As Application

    Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow)
        MsgBox "SlideShowBegin"
    End Sub

然后,在非类模块中,您必须创建该类型的对象并将 App 设置为 Application。

Dim X As New Class1

Sub InitializeApp()
Set X.App = Application
End Sub

现在,我唯一遇到的问题是,如果您不使用 Powerpoint 中的宏菜单手动调用 InitializeApp,事件将不起作用。您必须先调用此子程序,然后才能在幻灯片开始时调用此子程序,包括此子程序。

在运行我的 powerpoint 之前,我该如何去调用这个 sub?有一个更好的方法吗?

编辑:

我试过使用 Class_Initialize 但它只有在第一次使用时才会被调用,或者你做出如下声明Dim X as Class1; X = new Class1

4

3 回答 3

1

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

于 2012-04-30T19:07:23.587 回答
1

回答一个老问题,但我希望我的解决方案可以帮助解决这个问题的人。

针对此问题的一般建议是使用插件或在幻灯片上放置一些元素,然后在单击或悬停时执行初始化。两者都不总是需要的,所以我有以下方法:

在某些模块中:

Dim slideShowRunning As Boolean
-----------------------------
Sub SlideShowBegin(ByVal Wn As SlideShowWindow)
    ' Your code for start-up
End Sub
-----------------------------
Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
    If TypeName(slideShowRunning) = "Empty" Or slideShowRunning = False Then
        slideShowRunning = True
        SlideShowBegin Wn
    End If
End Sub
----------------------------
Public Sub OnSlideShowTerminate(ByVal Wn As SlideShowWindow)
    slideShowRunning = False
End Sub

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

于 2020-07-30T13:57:32.197 回答
0

事实上, OnSlideShowPageChange 在幻灯片开始时运行。如果不需要使用全局变量,请确保它在后续页面更改中不起作用。有关详细信息,请参阅 C. Binair 的回答。

于 2022-01-23T15:41:10.467 回答