我正在尝试编写一个子程序,将所有(以后只有一些)幻灯片从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幻灯片并保持其源格式?
答案 0 :(得分:1)
对于遇到同样问题的人来说,这是我设法创建的子程序。 objDestPresentation
应为Presentation Object,sourceSlideRange
应为SlideRange Object。
这会将幻灯片从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
答案 1 :(得分:0)
这帮助我解决了PowerPoint的长期挫败感。非常感谢您发布此内容。我发现的细微差别对于在粘贴之前激活我想要影响的演示文稿很重要,否则幻灯片可能会在错误的位置结束。在我的情况下,我在三个不同的演示文稿之间玩杂耍:
关于激活正确的演示文稿,我使用了这里的答案:
答案 2 :(得分:0)
在使用“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 之后粘贴新幻灯片。