Поскольку вы делаете это очень часто, вы должны сделать надстройку для этого. Идея состоит в том, чтобы создать копии презентации до количества разделов в ней, затем открыть их и удалить другие разделы и сохранить.
- Создание пустой презентации с макросами включен (* .pptm) и, возможно, добавить кнопки пользовательского интерфейса для вызова
SplitIntoSectionFiles
- испытаний и когда удовлетворяют условию, сохранить как PowerPoint Add-In (* .ppam). Не удаляйте файл pptm!
Предполагая, что все файлы pptx, с которыми вы имеете дело, вы можете использовать этот код. Он открывает разбитые файлы pptx в фоновом режиме, затем удаляет ненужные разделы и сохраняет, закрывает. Если все будет хорошо, вы получите окно с сообщениями.
Private Const PPT_EXT As String = ".pptx"
Sub SplitIntoSectionFiles()
On Error Resume Next
Dim aNewFiles() As Variant, sPath As String, i As Long
With ActivePresentation
sPath = .Path & "\"
For i = 1 To .SectionProperties.Count
ReDim Preserve aNewFiles(i)
' Store the Section Names
aNewFiles(i - 1) = .SectionProperties.Name(i)
' Force Save Copy as pptx format
.SaveCopyAs sPath & aNewFiles(i - 1), ppSaveAsOpenXMLPresentation
' Call Sub to Remove irrelevant sections
RemoveOtherSections sPath & aNewFiles(i - 1) & PPT_EXT
Next
If .SectionProperties.Count > 0 And Err.Number = 0 Then MsgBox "Successfully split " & .Name & " into " & UBound(aNewFiles) & " files."
End With
End Sub
Private Sub RemoveOtherSections(sPPT As String)
On Error Resume Next
Dim oPPT As Presentation, i As Long
Set oPPT = Presentations.Open(FileName:=sPPT, WithWindow:=msoFalse)
With oPPT
' Delete Sections from last to first
For i = .SectionProperties.Count To 1 Step -1
' Delete Sections that are not in the file name
If Not InStr(1, .Name, .SectionProperties.Name(i), vbTextCompare) = 1 Then
' Delete the Section, along with the slides associated with it
.SectionProperties.Delete i, True
End If
Next
.Save
.Close
End With
Set oPPT = Nothing
End Sub
Читайте о пользовательском интерфейсе, если у вас нет опыта создания вам собственным вкладок ленты: msdn и использовать «Офис пользовательского интерфейс редактора», я хотел бы использовать imageMso «CreateModule» для кнопки.
Спасибо! Работает для меня без проблем. – TheLostOne