|
楼主 |
发表于 2015-9-1 11:21
|
显示全部楼层
本帖最后由 philhomic 于 2015-9-1 11:22 编辑
我在以下链接中找到一种解决办法,但是效率很低。如果是一个几兆的PPT,这样拆分下来要费好长的时间。不知道是否有更好更有效率的方法?http://www.pptfaq.com/FAQ01086_Break_a_presentation_up_into_several_smaller_presentations.htm
链接中的方法,是每次把整个PPT都另存一下,然后删掉多与的slides。代码如下:
- Sub SplitFile()
- Dim lSlidesPerFile As Long
- Dim lTotalSlides As Long
- Dim oSourcePres As Presentation
- Dim otargetPres As Presentation
- Dim sFolder As String
- Dim sExt As String
- Dim sBaseName As String
- Dim lCounter As Long
- Dim lPresentationsCount As Long ' how many will we split it into
- Dim x As Long
- Dim lWindowStart As Long
- Dim lWindowEnd As Long
- Dim sSplitPresName As String
- On Error GoTo ErrorHandler
- Set oSourcePres = ActivePresentation
- If Not oSourcePres.Saved Then
- MsgBox "Please save your presentation then try again"
- Exit Sub
- End If
- lSlidesPerFile = CLng(InputBox("How many slides per file?", "Split Presentation"))
- lTotalSlides = oSourcePres.Slides.Count
- sFolder = ActivePresentation.Path & ""
- sExt = Mid$(ActivePresentation.Name, InStr(ActivePresentation.Name, ".") + 1)
- sBaseName = Mid$(ActivePresentation.Name, 1, InStr(ActivePresentation.Name, ".") - 1)
- If (lTotalSlides / lSlidesPerFile) - (lTotalSlides \ lSlidesPerFile) > 0 Then
- lPresentationsCount = lTotalSlides \ lSlidesPerFile + 1
- Else
- lPresentationsCount = lTotalSlides \ lSlidesPerFile
- End If
- If Not lTotalSlides > lSlidesPerFile Then
- MsgBox "There are fewer than " & CStr(lSlidesPerFile) & " slides in this presentation."
- Exit Sub
- End If
- For lCounter = 1 To lPresentationsCount
- ' which slides will we leave in the presentation?
- lWindowEnd = lSlidesPerFile * lCounter
- If lWindowEnd > oSourcePres.Slides.Count Then
- ' odd number of leftover slides in last presentation
- lWindowEnd = oSourcePres.Slides.Count
- lWindowStart = ((oSourcePres.Slides.Count \ lSlidesPerFile) * lSlidesPerFile) + 1
- Else
- lWindowStart = lWindowEnd - lSlidesPerFile + 1
- End If
- ' Make a copy of the presentation and open it
- sSplitPresName = sFolder & sBaseName & _
- "_" & CStr(lWindowStart) & "-" & CStr(lWindowEnd) & "." & sExt
- oSourcePres.SaveCopyAs sSplitPresName, ppSaveAsDefault
- Set otargetPres = Presentations.Open(sSplitPresName, , , True)
- With otargetPres
- For x = .Slides.Count To lWindowEnd + 1 Step -1
- .Slides(x).Delete
- Next
- For x = lWindowStart - 1 To 1 Step -1
- .Slides(x).Delete
- Next
- .Save
- .Close
- End With
- Next ' lpresentationscount
- NormalExit:
- Exit Sub
- ErrorHandler:
- MsgBox "Error encountered"
- Resume NormalExit
- End Sub
复制代码
|
|