【问题标题】:Programmatically copy shapes with source formatting (PowerPoint 2007)以编程方式复制具有源格式的形状 (PowerPoint 2007)
【发布时间】:2011-05-06 18:16:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可能必须通过这样的管道为每个对象获取绝对 RGB 值: Theme->getColorForIndex(Object->getThemeColorIndex)
  • 您尝试过使用剪贴板吗?

标签: vba office-interop powerpoint


【解决方案1】:

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

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

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

至少在我的机器上,如果没有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多