使用 vba 从 powerpoint 中文本框的一部分创建字符串列表

问题描述 投票:0回答:1

我有一个包含许多幻灯片的 PowerPoint 演示文稿,所有幻灯片都只有一个文本框。本质上,我试图随机播放幻灯片,并确保幻灯片的一个属性(文本框的第一行)在标题幻灯片之后的前 5 张幻灯片上是唯一的。

为此,我的想法是创建一个列表,其中包含从幻灯片 2 到幻灯片 6 的 PowerPoint 幻灯片文本框的第一行。

为了确保此列表中的每个值都是唯一的,我的计划是迭代此列表,并在发现重复值时将幻灯片发送到演示文稿的末尾。

我是 vba 新手,希望得到任何反馈,因为在实现初始随机播放后我非常迷失

Sub ShuffleSlides()
numStart = 1
numStop = 5
FirstSlide = 2
LastSlide = 21

Randomize
For j = numStart To numStop

    For i = FirstSlide To LastSlide
        RSN = Int((LastSlide - FirstSlide + 1) * Rnd + FirstSlide)
        ActivePresentation.Slides(i).MoveTo (RSN)
    Next i
Next j

End Sub

我希望获得一些方向感,了解如何找到从每个文本框检索第一行的信息以制作此列表,因为我无法找到类似的信息。

vba powerpoint
1个回答
0
投票

请尝试一下。

Option Explicit

Sub ShuffleSlides()
    Dim Sld As Slide, Shp As Shape
    Dim oDic, aTxt, i As Long, RSN
    Const NumStop = 5
    Const FirstSlide = 2
    Const LastSlide = 21
    Set oDic = CreateObject("scripting.dictionary")
    Randomize
    For i = FirstSlide To LastSlide
        RSN = Int((LastSlide - FirstSlide + 1) * Rnd + FirstSlide)
        Set Sld = ActivePresentation.Slides(RSN)
        ' Get the first line
        aTxt = Split(Sld.Shapes(1).TextFrame.TextRange.Text, Chr(13))
        ' Check if the first line is duplicated
        If Not oDic.exists(aTxt(0)) Then
            ' Move slide
            Sld.MoveTo FirstSlide
            oDic(aTxt(0)) = ""
            If oDic.Count = NumStop Then Exit For
        End If
    Next i
End Sub

微软文档:

分割功能

© www.soinside.com 2019 - 2024. All rights reserved.