如何使用For Loop选择几张幻灯片?

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

我有一个演示文稿,可以根据标题中的文本分为几个较小的演示文稿。

我设法找到并编译了一个代码,该代码找到了最后一张包含文本的幻灯片,然后选择了几张以前的幻灯片,将它们复制到一个新的演示文稿中,进行保存,然后对下一个值重复该操作。

如果每个文本的幻灯片数量相同(并且所有具有相同文本的幻灯片都以相同的顺序排列),那很好,但是在我的演示文稿中并非总是如此。我需要修改功能。

[基本上,它不仅应返回幻灯片,还应返回幻灯片范围,并且应在函数为true的每个循环中调整其大小。我知道如何将所有幻灯片索引作为字符串获取,但是我不知道如何使用该字符串来选择那些幻灯片。

Function FindSlideByTitle(sTextToFind As String) As slide

For Each oSl In ActivePresentation.slides
    With oSl.Shapes.Title.TextFrame
        If .HasText Then
            If InStr(1, .TextRange.Text, sTextToFind, vbTextCompare) > 0 Then
                Set FindSlideByTitle = oSl
            End If
        End If
    End With
Next
vba powerpoint slide
2个回答
0
投票

在这种情况下,创建滑动范围没有优势。正如您所发现的,该功能无法正常工作,因为它一次只能返回一张幻灯片。

相反,使用循环创建一个Sub,然后替换

Set FindSlideByTitle = oSl

带有将找到的幻灯片添加到数组的例程:

Option Base 1
Dim FoundSlide() As Integer
Dim oSl As Slide

Sub FindSlideByTitle()
  ReDim Preserve FoundSlide(1)
  For Each oSl In ActivePresentation.Slides
    With oSl.Shapes.Title.TextFrame
      If .HasText Then
        If InStr(1, .TextRange.Text, "Ham", vbTextCompare) > 0 Then
          Count% = UBound(FoundSlide)
          ReDim Preserve FoundSlide(Count% + 1)
          FoundSlide(Count% + 1) = oSl.SlideNumber
        End If
      End If
    End With
  Next
End Sub

然后处理一次一张幻灯片的子集:

Sub DoSomethingWithSlide()
  For X = 1 To UBound(FoundSlide)
    With ActivePresentation.Slides(FoundSlide(X))
      'Process each slide here
    End With
  Next X
End Sub

0
投票

无论如何,这是我最后想出的,它(几乎)似乎正在起作用。

Dim sSlides() As String
    sSlides() = Split(FindSlide(sCountry), ";|;")

Dim n As Long
Dim iSlides() As Integer
ReDim iSlides(LBound(sSlides) To UBound(sSlides))
For n = LBound(sSlides) To UBound(sSlides)
    iSlides(n) = CInt(sSlides(n))
Next n

Dim rCountrySlides As SlideRange
Set rCountrySlides = ActivePresentation.slides.range(iSlides)
rCountrySlides.Select
© www.soinside.com 2019 - 2024. All rights reserved.