VBA代码,用于为幻灯片提供一个常量名称

时间:2019-05-29 15:34:00

标签: vba powerpoint powerpoint-vba powerpoint-2010

我正在努力减少使某些幻灯片(我们称其为SlideXYZ)为最新状态所需的精力。 SlideXYZ是重要的内容幻灯片,可以在多个幻灯片组中找到。我最初创建的幻灯片对象在“源幻灯片”中进行更改后会自动更新。但是,不幸的是,幻灯片对象不包含动画(它们只是实际幻灯片的快照)。我现在正在尝试编写一个VBA脚本,该脚本将使用较新版本的SlideXYZ搜索并替换每个卡座中的SlideXYZ。但是,幻灯片编号是动态的(在上面添加新幻灯片时,它会更改)。我需要对SlideXYZ的静态,恒定引用。

我想到将一次将SlideXYZ复制到所有演示文稿中,然后在需要更新时使用Slide.Name属性查找其所有实例。

但是,每次将幻灯片粘贴到新演示文稿中时,PowerPoint似乎都会重新分配Slide.Name。我需要一个不会更改的参考,以便可以找到并替换SlideXYZ。

2 个答案:

答案 0 :(得分:0)

您已经发现:SlideIndexSlideNumberSlideIDName都不能用来标识复制的幻灯片。

您可以使用特征形状的“替代文字”来识别幻灯片:
只需右键单击形状并编辑其替代文本即可。

幻灯片注释也可能有助于识别幻灯片。

以下将一些幻灯片信息打印到调试窗口:

Private Sub IdentifyMySlide()
    Dim myslide As PowerPoint.Slide
    For Each myslide In ActivePresentation.Slides
        Debug.Print "Index: " & myslide.SlideIndex,
        Debug.Print "Number: " & myslide.SlideNumber,
        Debug.Print "ID: " & myslide.SlideID,
        Debug.Print "Name: " & myslide.Name,

        If myslide.Shapes.Count > 0 Then
            Debug.Print "Alternative ShapeText: " & myslide.Shapes(1).AlternativeText,
        End If

        If myslide.HasNotesPage Then
            If myslide.NotesPage(1).Shapes.Count > 0 Then
                If myslide.NotesPage(1).Shapes(1).HasTextFrame Then
                    Debug.Print "Notes: " & Left(myslide.NotesPage(1).Shapes(1).TextFrame.TextRange.Text, 10)
                Else
                    Debug.Print
                End If
            Else
                Debug.Print
            End If
        Else
            Debug.Print
        End If

    Next myslide
End Sub

答案 1 :(得分:0)

@Asger的建议可行,但更一致的方法(IMO)将是使用标签。幻灯片上的任何演示文稿,幻灯片或形状都可以以标签形式附加一段或多段文本。

例如:

ActivePresentation.Slides(1).Tags.Add "SlideIdentifier", "Bob"

将在当前演示文稿的幻灯片#1上创建一个名为SlideIdentifier的标签,其值为Bob。这些标签将随幻灯片一起移动,无论它走到哪里。

我维护的PowerPoint常见问题解答上的此页面包含有关使用标签的更多信息:

http://www.pptfaq.com/FAQ00815_Working_with_Tags_-and_a_bit_about_Functions-.htm