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

View slide title in Powerpoint VBA editor

在 Powerpoint VBA 编辑器中,我们得到 VBA 项目 window 中的幻灯片列表,分类在 "Microsoft PowerPoint Objects" 下。此列表将包括带有 ActiveX 控件的幻灯片。

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

在ExcelVBA中,编辑器的布局是一样的,都是作品列表sheet。但是,在 Excel 中,sheet 的名称显示在 sheet 编号后的括号中。因此,如果 Sheet1 被称为 "MyDataSheet",它将显示为 "Sheet1 (MyDataSheet)"。

如何在 Powerpoint 中实现类似的效果?有没有办法控制用于在 Powerpoint 编辑器中显示每张幻灯片的 name/title?

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

PPT 仍然在 "Microsoft PowerPoint Objects" 下显示分配的名称,但是如果您查看 IDE 的属性 window(按 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 中不允许使用的字符)。