在Powerpoint VBA编辑器中,我们在VBA项目窗口中获得了一个幻灯片列表,分类在“Microsoft PowerPoint Objects”下。此列表将包含具有ActiveX控件的幻灯片。
幻灯片上显示数字(“Slide1”,“Slide3”等),这些数字看起来像是基于幻灯片添加到演示文稿的顺序 - 而不是幻灯片的实际顺序在当前的演讲中。但是,幻灯片的标题或名称不包括在内。这使得使用它很困惑,并且很难找到具有想要使用的控件的幻灯片。
在Excel VBA中,编辑器的布局是相同的,带有工作表列表。但是,在Excel中,工作表的名称显示在工作表编号后面的括号中。因此,如果Sheet1被称为“MyDataSheet”,它将显示为“Sheet1(MyDataSheet)”。
如何在Powerpoint中实现类似的功能?有没有办法控制用于在Powerpoint编辑器中显示每张幻灯片的名称/标题?
答案 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中不允许使用的字符)。