Powerpoint VBA哈维球

时间:2015-04-25 09:45:35

标签: vba powerpoint powerpoint-vba

我试图在PowerPoint 2010+中使用VBA代码创建一些Harvey球。 为此,我插入一个圆形和一个馅饼并将它们组合起来。如果我从色带中插入两个形状然后对齐并组合它们,一切都很好。但是当我从VBA插入形状时,组合它们的结果是完全不同的,我不喜欢它。明白为什么。

所以:

  • 从功能区插入形状 - >使用功能区对齐 - >使用功能区组合 - >一切都好的
  • 从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

请帮助!

2 个答案:

答案 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")

非常感谢你!