我正在尝试编写一个子例程,将所有(后来只有一些)幻灯片从powerpoint文件复制并粘贴到另一个保持源格式。
这是我得到的最接近的:
Dim objPowerpointApp, objPresentations
Set objPowerpointApp = CreateObject("Powerpoint.Application")
Set objPresentations = objPowerpointApp.Presentations
Dim objNewPresentation
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1)
Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0)
Dim tempCurrentSlide
For Each tempCurrentSlide in objOldPresentation.Slides
tempCurrentSlide.Copy
objNewPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")
Next
它不会抛出任何错误,甚至粘贴正确的幻灯片母版,但它实际上并没有粘贴任何幻灯片。
我也尝试过这个:
Dim objPowerpointApp, objPresentations
Set objPowerpointApp = CreateObject("Powerpoint.Application")
Set objPresentations = objPowerpointApp.Presentations
Dim objNewPresentation
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1)
Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0)
Dim tempCurrentSlide
For Each tempCurrentSlide in objOldPresentation.Slides
tempCurrentSlide.Copy
objNewPresentation.Slides.Paste
objNewPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")
Next
这会粘贴正确的幻灯片母版和幻灯片,但幻灯片会以目标格式粘贴。
当然,这会正确粘贴所有幻灯片,但没有任何源格式:
Dim objPowerpointApp, objPresentations
Set objPowerpointApp = CreateObject("Powerpoint.Application")
Set objPresentations = objPowerpointApp.Presentations
Dim objNewPresentation
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1)
Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0)
Dim tempCurrentSlide, lngSlideIndex
For Each tempCurrentSlide in objOldPresentation.Slides
lngSlideIndex = objNewPresentation.Slides.Count
objNewPresentation.Slides.InsertFromFile tempSlideSet.Path, lngSlideIndex
Next
从我在文档和其他人的经验中可以找到的内容来看,第一个选项应该可以按照我的需要工作,所以我真的陷入了这一点。
如何使用 VBScript 复制并粘贴 powerpoint 幻灯片并保持其源格式?
对于遇到同样问题的任何人,这是我设法创建的子例程。
objDestPresentation
应该是 Presentation Object,而 sourceSlideRange
应该是 SlideRange 对象。
这会将幻灯片从
sourceSlideRange
复制到 objDestPresentation
的末尾。希望这能帮助某人减轻我所经历的一些挣扎!
Private Sub InsertSlide_Source(ByRef objDestPresentation, byVal sourceSlideRange)
sourceSlideRange.Copy
If Not objDestPresentation.Slides.Count = 0 Then
objDestPresentation.Windows(1).View.GotoSlide(objDestPresentation.Slides.Count)
End If
objDestPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")
End Sub
这帮助我解决了长期以来对 PowerPoint 的不满。非常感谢您发布此内容。我发现的一个细微差别是在粘贴之前激活我想要影响的演示文稿非常重要,否则幻灯片可能会出现在错误的位置。就我而言,我在三个不同的演示文稿之间处理事情:
关于激活正确的演示文稿,我使用了这里的答案:
在使用“PasteSourceFormatting”选项粘贴之前,您首先需要激活目标幻灯片的窗口
当TargetPPT是VBA中的目标演示文稿时,如果我想复制SourcePPT的所有幻灯片:
SourcePPT.Slides.Range.Copy
TargetPPT.Windows(1).Activate
TargetPPT.Application.CommandBars.ExecuteMso ("PasteSourceFormatting")
幻灯片粘贴在当前活动幻灯片中 使用
Application.ActiveWindow.View.GotoSlide (5)
定位 f.i.首先在幻灯片 5 上,然后在幻灯片 5 之后粘贴新幻灯片。