Vba 使用源格式以编程方式复制形状(PowerPoint 2007)

Vba 使用源格式以编程方式复制形状(PowerPoint 2007),vba,office-interop,powerpoint,Vba,Office Interop,Powerpoint,我需要能够在PowerPoint 2007中以编程方式将形状、图表、表格等从一张幻灯片复制到另一张幻灯片,并保持其原始颜色。源幻灯片和目标幻灯片位于具有不同主题的不同演示文稿中 这些形状可能很复杂,包括很多颜色,例如图表、表格等。目标幻灯片必须保持其主题,因此我不能简单地复制整个原始幻灯片配色方案 在PowerPoint中手动复制形状时,我可以选择保留源格式。这将复制形状的所有原始颜色,将主题颜色转换为绝对RGB值 以编程方式执行此操作的最简单方法是什么?您需要转到幻灯片并使用Applicati

我需要能够在PowerPoint 2007中以编程方式将形状、图表、表格等从一张幻灯片复制到另一张幻灯片,并保持其原始颜色。源幻灯片和目标幻灯片位于具有不同主题的不同演示文稿中

这些形状可能很复杂,包括很多颜色,例如图表、表格等。目标幻灯片必须保持其主题,因此我不能简单地复制整个原始幻灯片配色方案

在PowerPoint中手动复制形状时,我可以选择保留源格式。这将复制形状的所有原始颜色,将主题颜色转换为绝对RGB值


以编程方式执行此操作的最简单方法是什么?

您需要转到幻灯片并使用Application.CommandBars.ExecuteMso

如果以后不需要返回到先前选择的幻灯片,可以跳过DoEvents和对Application.CommandBars.ExecuteMso的第二次调用

粘贴后,新形状的位置似乎有时有点倾斜,因此我获得了第二张幻灯片形状集合中最后一个形状的引用,并复制了原始形状的位置

至少在我的机器上,如果没有DoEvents,宏在我执行它时不会做任何事情,但如果我通过它,它会工作

Sub CopySelectedShapeToNextSlide()
    Dim oShape As Shape
    Dim oSlide As Slide
    Dim nextSlide As Slide
    Dim newShape As Shape

    Set oShape = Application.ActiveWindow.Selection.ShapeRange(1)
    Set oSlide = Application.ActiveWindow.Selection.SlideRange(1)
    Set nextSlide = oSlide.Parent.Slides(oSlide.SlideIndex + 1)

    oShape.Copy

    Application.ActiveWindow.View.GotoSlide nextSlide.SlideIndex

    Application.CommandBars.ExecuteMso "PasteSourceFormatting"
    Set newShape = nextSlide.Shapes(nextSlide.Shapes.Count)
    newShape.Left = oShape.Left
    newShape.Top = oShape.Top

    DoEvents

    Application.ActiveWindow.View.GotoSlide oSlide.SlideIndex

    Debug.Print newShape.Name

End Sub

您可能必须通过这样的管道获取每个对象的绝对RGB值:Theme->getColorForIndexObject->GetThemeColorIndexId是否尝试使用剪贴板?