首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerPoint目录

PowerPoint目录
EN

Stack Overflow用户
提问于 2022-10-23 19:16:07
回答 1查看 82关注 0票数 2

我需要你:我应该在我的PowerPoint演示文稿中插入一个动态索引(它也会更新与标题相关的页码)。

我在网上搜索过,但没有找到任何解决方案;唯一接近的是使用基于超文本链接的VBA宏(下面的代码):当宏启动时,它更新索引中的页码,但随后该链接被删除,因此需要手动重新插入它。

有什么方法可以使这个过程自动化吗?谢谢。

代码语言:javascript
复制
Sub TableOfContentUpdater()
    Dim pTableOfContent As Slide
    Set pTableOfContent = ActivePresentation.Slides(2)
    
    For Each pHyperLink In pTableOfContent.Hyperlinks
        Dim pLinkNumber As String
        Dim pLinkedSlide As Slide
        pLinkNumber = Left(pHyperLink.SubAddress, InStr(pHyperLink.SubAddress, ",") - 1)
        pHyperLink.TextToDisplay = ActivePresentation.Slides.FindBySlideID(CLng(pLinkNumber)).SlideIndex
    Next pHyperLink
End Sub
EN

回答 1

Stack Overflow用户

发布于 2022-10-24 07:13:08

我开发了一个脚本,用于从零开始在PowerPoint中生成一个完整的内容表,该脚本循环遍历所有幻灯片,并组装它们的标题文本及其相对幻灯片号,并应用适当的超链接。以下是代码:

代码语言:javascript
复制
    For slideNum = 1 To ActivePresentation.Slides.Count
        If slideNum > 1 Then
            If ActivePresentation.Slides(slideNum).Shapes.HasTitle Then
                slideHeader = ActivePresentation.Slides(slideNum).Shapes.Title.TextFrame.TextRange.Text & "..........................................................................." & "slide: " & slideNum + 1
                TOC_SlideList = TOC_SlideList & slideHeader & vbCrLf
            End If
        End If
    Next
    Set TOC = ActivePresentation.Slides.Add(2, ppLayoutText)
    TOC.Shapes(1).TextFrame.TextRange = "Table of Contents"
    TOC.Shapes(2).TextFrame.TextRange = TOC_SlideList
    For slideNum = 1 To ActivePresentation.Slides.Count
        If slideNum > 2 Then
            If ActivePresentation.Slides(slideNum).Shapes.HasTitle Then
                slideHeader = ActivePresentation.Slides(slideNum).Shapes.Title.TextFrame.TextRange.Text
                With TOC.Shapes(2).TextFrame.TextRange.Paragraphs(slideNum - 2).Find("slide: " & slideNum).ActionSettings(ppMouseClick)
                    .Action = ppActionHyperlink
                    .Hyperlink.Address = ""
                    .Hyperlink.SubAddress = ActivePresentation.Slides(slideNum).SlideID & "," & ActivePresentation.Slides(slideNum).SlideIndex & "," + slideHeader
                End With
            End If
        End If
    Next
End Sub

上面的代码产生以下结果:

结合这个示例和您的用例,我们可以遍历并映射数组列表中的超链接名称、幻灯片索引和目的地。然后,我们可以使用数组适当地更新链接。

下面是示例代码:

代码语言:javascript
复制
Sub TableOfContentUpdater()
    Dim pTableOfContent As Slide
    Set pTableOfContent = ActivePresentation.Slides(2)
    Dim pLinkNumber As String
    Dim pLinkedSlide As Slide
    Dim pHyperLink As Hyperlink
    ReDim subAddresses(pTableOfContent.Hyperlinks.Count - 1) As Variant
    ReDim oldNames(pTableOfContent.Hyperlinks.Count - 1) As Variant
    ReDim newNames(pTableOfContent.Hyperlinks.Count - 1) As Variant
    Dim i As Integer
    For Each pHyperLink In pTableOfContent.Hyperlinks
        subAddresses(i) = pHyperLink.SubAddress
        pLinkNumber = Left(pHyperLink.SubAddress, InStr(pHyperLink.SubAddress, ",") - 1)
        newNames(i) = ActivePresentation.Slides.FindBySlideID(CLng(pLinkNumber)).SlideIndex
        pHyperLink.TextToDisplay = newNames(i)
        i = i + 1
    Next pHyperLink
    i = 0
    For Each pHyperLink In pTableOfContent.Hyperlinks
        pHyperLink.Delete
        i = i + 1
    Next pHyperLink
    i = 0
    For Each pSubAddress In subAddresses
        With pTableOfContent.Shapes(2).TextFrame.TextRange.Paragraphs(i + 1).Find(newNames(i)).ActionSettings(ppMouseClick)
            .Action = ppActionHyperlink
            .Hyperlink.Address = ""
            .Hyperlink.SubAddress = pSubAddress
        End With
    i = i + 1
   Next pSubAddress
End Sub

当应用于上面创建的电子表格时,结果是:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74174078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档