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

问题描述 投票:0回答:3

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

vbscript powerpoint paste
3个回答
1
投票

对于遇到同样问题的任何人,这是我设法创建的子例程。

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

0
投票

这帮助我解决了长期以来对 PowerPoint 的不满。非常感谢您发布此内容。我发现的一个细微差别是在粘贴之前激活我想要影响的演示文稿非常重要,否则幻灯片可能会出现在错误的位置。就我而言,我在三个不同的演示文稿之间处理事情:

  1. 我从一个空壳演示文稿开始,然后填充它
  2. 我有一个“空白幻灯片”模板,用于大多数幻灯片。
  3. 有时我还需要添加其他一次性幻灯片。

关于激活正确的演示文稿,我使用了这里的答案:

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


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

© www.soinside.com 2019 - 2024. All rights reserved.