在powerpoint中更改幻灯片时如何运行vba代码?

时间:2017-12-15 21:51:45

标签: vba powerpoint powerpoint-vba powerpoint-2013 powerpoint2016

当我更换幻灯片时,我正在尝试重置某些文本框和标签的内容,但我很难让它工作。经过大量的谷歌搜索和搜索后,我想出了这个,但它似乎没有用。我正在尝试在PowerPoint 2013和2016中使用OnSlideShowPageChange事件,但它似乎没有任何效果。我不习惯使用PowerPoint vba,所以我可能做错了。

编辑:我设法找到了重置标签文字的替代方法。当用户专注于其中一个文本框或将鼠标移到标签上时,我设法让它重置。但是,我仍然很想知道这个问题的答案;我不确定为什么我的代码无效。

如果有人能指出任何问题以及如何解决这些问题,我会很高兴。

这是我到目前为止所得到的:

Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
    Dim Sld As Slide

    If Wn.View.CurrentShowPosition = 9 Then
        'Perform Updates for slide #9
        Set Sld = Application.ActivePresentation.Slides(9)
        Sld.Shapes(TextBox_Form_Name).TextFrame.TextRange.Text = ""
        Sld.Shapes(TextBox_Form_Email).TextFrame.TextRange.Text = ""
        Sld.Shapes(TextBox_Form_Message).TextFrame.TextRange.Text = ""
        Sld.Shapes(Label_Form_Info).TextFrame.TextRange.Text = ""
    End If

    If Wn.View.CurrentShowPosition = 18 Then
        'Perform Updates for slide #18
        Set Sld = Application.ActivePresentation.Slides(18)
        Sld.Shapes(TextBox_Form_Name).TextFrame.TextRange.Text = ""
        Sld.Shapes(TextBox_Form_Email).TextFrame.TextRange.Text = ""
        Sld.Shapes(TextBox_Form_Message).TextFrame.TextRange.Text = ""
        Sld.Shapes(Label_Form_Info).TextFrame.TextRange.Text = ""
    End If
End Sub

我也尝试将形状名称放在语音标记中,但这似乎没有帮助。

顺便说一句,我需要代码在PowerPoint 2013和2016中都有效。

1 个答案:

答案 0 :(得分:0)

以下是http://www.pptfaq.com

的PowerPoint常见问题解答中的答案

假设您的代码依赖于OnSlideShowPageChange(SHW as SlideshowWindow)事件,当从VBA内部运行或从PowerPoint中启动演示文稿时有效,但是当您通过双击PPS或PPSM的图标启动该节目时则不行。幻灯片放映正常启动,但OnSlideShowPageChange子例程中的代码永远不会运行。

解 在第一张幻灯片上添加一个Active-X控件(来自“开发人员”选项卡)(如果您不想在幻灯片放映期间看到它,请将其拖离幻灯片)。

这会强制VBA在演示文稿启动时进行初始化,因此会触发事件并运行代码。