我有一个演示文稿,可以根据标题中的文本分为几个较小的演示文稿。
我设法找到并编译了一个代码,该代码找到了最后一张包含文本的幻灯片,然后选择了几张以前的幻灯片,将它们复制到一个新的演示文稿中,进行保存,然后对下一个值重复该操作。
如果每个文本的幻灯片数量相同(并且所有具有相同文本的幻灯片都以相同的顺序排列),那很好,但是在我的演示文稿中并非总是如此。我需要修改功能。
[基本上,它不仅应返回幻灯片,还应返回幻灯片范围,并且应在函数为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
在这种情况下,创建滑动范围没有优势。正如您所发现的,该功能无法正常工作,因为它一次只能返回一张幻灯片。
相反,使用循环创建一个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
无论如何,这是我最后想出的,它(几乎)似乎正在起作用。
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