我试图在PowerPoint 2010+中使用VBA代码创建一些Harvey球。 为此,我插入一个圆形和一个馅饼并将它们组合起来。如果我从色带中插入两个形状然后对齐并组合它们,一切都很好。但是当我从VBA插入形状时,组合它们的结果是完全不同的,我不喜欢它。明白为什么。
所以:
您可以在this video中看到它。
用于插入下面形状(非常基本)的VBA代码。
ActivePresentation.Slides(slide_num).Shapes.AddShape(msoShapeOval, 100, 100, 50, 50).Select
ActivePresentation.Slides(slide_num).Shapes.AddShape(msoShapePie, 200, 100, 50, 50).Select
请帮助!
答案 0 :(得分:1)
如果饼图(黄色菱形)的两个调整的绝对值都是以下0,90,180,270值中的任何一个,则组合的行为类似于子几何操作。这看起来像是Combine几何中的一个错误。相反,如果您将值设置为90.01,那么您将获得预期的行为。
Sub Test1()
Dim shp1 As Shape
Dim shp2 As Shape
Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 100, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 100, 100, 50, 50)
Call ActiveWindow.Selection.SlideRange(1).Shapes.Range(Array( shp1.ZOrderPosition, shp2.ZOrderPosition)).MergeShapes(msoMergeCombine)
End Sub
Sub Test2()
Dim shp1 As Shape
Dim shp2 As Shape
Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 200, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 200, 100, 50, 50)
shp2.Adjustments(1) = shp2.Adjustments(1) + 0.1
Call ActiveWindow.Selection.SlideRange(1).Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition)).MergeShapes(msoMergeCombine)
End Sub
答案 1 :(得分:0)
我的朋友,你是一个救命的人!
只是一个简短的评论,如果有人需要这个:在PP2010中,MergeShapes命令不存在。我使用的解决方法是选择形状数组并调用功能区的组合命令。
Dim oshpR As ShapeRange
Set oshpR = ActivePresentation.Slides(1).Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition))
oshpR.Select
CommandBars.ExecuteMso ("ShapesCombine")
非常感谢你!