在Powerpoint VBA编辑器中查看幻灯片标题

时间:2015-05-11 08:20:24

标签: powerpoint-vba

在Powerpoint VBA编辑器中,我们在VBA项目窗口中获得了一个幻灯片列表,分类在“Microsoft PowerPoint Objects”下。此列表将包含具有ActiveX控件的幻灯片。

幻灯片上显示数字(“Slide1”,“Slide3”等),这些数字看起来像是基于幻灯片添加到演示文稿的顺序 - 而不是幻灯片的实际顺序在当前的演讲中。但是,幻灯片的标题或名称不包括在内。这使得使用它很困惑,并且很难找到具有想要使用的控件的幻灯片。

Powerpoint slide name display

在Excel VBA中,编辑器的布局是相同的,带有工作表列表。但是,在Excel中,工作表的名称显示在工作表编号后面的括号中。因此,如果Sheet1被称为“MyDataSheet”,它将显示为“Sheet1(MyDataSheet)”。

Excel sheet name display

如何在Powerpoint中实现类似的功能?有没有办法控制用于在Powerpoint编辑器中显示每张幻灯片的名称/标题?

1 个答案:

答案 0 :(得分:2)

这是PPT对象模型的一个奇怪之处。每张幻灯片都有一个内部名称,在创建幻灯片时由PPT分配。这就是您在IDE中看到的内容。每张幻灯片还有一个.Name属性,该属性最初与PPT分配的幻灯片名称相同,但您可以通过编程方式进行更改。

PPT仍会在" Microsoft PowerPoint Objects"下显示指定的名称。但是如果您查看IDE的“属性”窗口(按F4显示它),您将看到(并可以编辑)幻灯片的.Name属性。这可以让您知道您在IDE中选择了哪张幻灯片。

您还可以运行一些代码来以反映幻灯片顺序的方式更改.Name属性:

Sub Thing()
    Dim oSl As Slide
    For Each oSl In ActivePresentation.Slides
        oSl.Name = "SLIDE_" & CStr(oSl.SlideIndex)
    Next
End Sub

如果你想获得一点点发烧友,你可以让它获取幻灯片的标题(如果有的话)作为.Name并使用SLIDE_index作为.Name如果不是:

Sub Thing()
    Dim oSl As Slide
    Dim sTemp As String

    For Each oSl In ActivePresentation.Slides
        sTemp = SlideTitle(oSl)
        If Len(sTemp) > 0 Then
            oSl.Name = oSl.Shapes.Title.TextFrame.TextRange.Text
        Else
            oSl.Name = "SLIDE_" & CStr(oSl.SlideIndex)
        End If
    Next
End Sub

Function SlideTitle(oSl As Slide) As String

    On Error GoTo ErrHandler
    SlideTitle = oSl.Shapes.Title.TextFrame.TextRange.Text

NormalExit:
    Exit Function
ErrHandler:
    SlideTitle = ""
    GoTo NormalExit

End Function

这里要注意的一件事是,如果你尝试给两个幻灯片提供相同的.Name属性,PPT可能会或可能不会抱怨。换句话说,您可能希望确保幻灯片标题是唯一的。可能存在其他问题(例如.Name中不允许使用的字符)。