我应该如何使用VBScript复制并粘贴一个powerpoint幻灯片保存源格式?

时间:2015-06-10 23:14:48

标签: vbscript powerpoint paste

我正在尝试编写一个子程序,将所有(以后只有一些)幻灯片从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幻灯片并保持其源格式?

3 个答案:

答案 0 :(得分:1)

对于遇到同样问题的人来说,这是我设法创建的子程序。 objDestPresentation应为Presentation ObjectsourceSlideRange应为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的长期挫败感。非常感谢您发布此内容。我发现的细微差别对于在粘贴之前激活我想要影响的演示文稿很重要,否则幻灯片可能会在错误的位置结束。在我的情况下,我在三个不同的演示文稿之间玩杂耍:

  1. 我从一个空的shell演示开始,然后填充
  2. 我有一个“空白幻灯片”模板,我用于大多数幻灯片。
  3. 我有时还需要包含其他一次性幻灯片。
  4. 关于激活正确的演示文稿,我使用了这里的答案:

    http://answers.microsoft.com/en-us/msoffice/forum/msoffice_powerpoint-msoffice_custom/powerpoint-vba-making-right-window-active/32c9fa95-fa1d-46f8-912a-09771a63a27a 代码

答案 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 之后粘贴新幻灯片。