很好的问题,我想自己做这个很久了,所以花时间为你(和我!)想办法。
基本上,您需要 a) 遍历所有 NamedSlideShows,b) 通过 SlideID 找到他们的幻灯片,c) 添加新的演示文稿,然后 d) 使用原始设计复制 NamedSlideShow 幻灯片.您可以为一个或所有自定义节目执行此操作,具体取决于您发送命令的方式。
这是一个例子:
Sub FindShows()
Dim p As PowerPoint.Presentation
Set p = PowerPoint.ActivePresenation
Dim cShow As PowerPoint.NamedSlideShow
For Each cShow In p.SlideShowSettings.NamedSlideShows
SaveCustomShow (cShow.Name, p)
'If using PowerPoint 2010 use the following line instead:
'SaveCustomShow cShow.Name, p
Next
End Sub
FindShows 子程序只是在ActivePresentation 中找到所有自定义节目并将它们发送到一个例程,该例程将根据指定的自定义节目名称创建每个新的演示文稿。您可以根据需要对其进行自定义。
下面的这个例程是它的核心。有几点需要注意:
- 寄过来的幻灯片设计
源幻灯片,你必须明确
将复制的幻灯片设置为使用该幻灯片
设计。
-
NamedSlideShow 只会给你
其中幻灯片的SlideID。
您可以使用FindBySlideID 然后
在原件中识别该幻灯片
演示文稿 - 它返回一张幻灯片
目的。然后你只需复制它并
将其粘贴到设计中
原创。
Sub SaveCustomShow(showName As String, p As Presentation)
Dim cShows As PowerPoint.NamedSlideShows
Set cShows = p.SlideShowSettings.NamedSlideShows
Dim cSlideIDs As Variant
cSlideIDs = cShows(showName).SlideIDs
Dim destinationPath As String
destinationPath = "C:\Temp\"
Dim newP As PowerPoint.Presentation
Set newP = PowerPoint.Presentations.Add(WithWindow:=False)
With newP
.SaveAs destinationPath & cShows(showName).Name
Dim s As PowerPoint.Slide
Dim e As Integer
For e = 1 To UBound(cSlideIDs)
Set s = p.Slides.FindBySlideID(SlideID:=cSlideIDs(e))
s.Copy
.Slides.Paste.Design = s.Design
Next
.Save
.Close
End With
Set newP = Nothing
End Sub
代码中没有任何错误检查,因此需要解决,但它就像一个魅力!