我需要能够在PowerPoint 2007中以编程方式将形状(图表,表格等)从一张幻灯片复制到另一张幻灯片,保留原始颜色。源幻灯片和目标幻灯片位于具有不同主题的不同演示文稿中。
这些形状可能很复杂并且包含很多颜色,例如图表,表格等。目标幻灯片必须保持其主题,因此我不能简单地复制整个原始幻灯片colorScheme。
在PowerPoint中手动复制形状时,我会选择“保持源格式”。这将复制形状的所有原始颜色,将主题颜色转换为绝对RGB值。
以编程方式执行此操作的最简单方法是什么?
答案 0 :(得分:0)
您需要转到幻灯片并使用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