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