2017-09-03 1 views
0

하나의 속성을 사용하여 동일한 모양을 하나로 병합하려고합니다. 코드를 컴파일하는 동안 객체 'commandbar'의 'executemso'메소드가 실패했습니다. 나는 vba에서 새롭기 때문에 누군가가 나를 고칠 수 있으면 좋을 것입니다.두 모양이 합병으로 병합으로 파워 포인트에서 VBA를 사용

Sub ShapesUnion() 

    Dim sld As Slide 
    Dim shp As Shape 

    For Each sld In ActivePresentation.Slides 
    For Each shp In sld.Shapes 

      If shp.Fill.Type = msoFillSolid Then 
      With shp.Duplicate 
       .Left = shp.Left 
       .Top = shp.Top 
      End With 
      End If 
      shp.Select 
      CommandBars.ExecuteMso ("ShapesUnion") 
     Next 
    Next 

End Sub 
+0

그냥뿐만 아니라이 방법으로 컴파일하지 않을 것입니다. 당신의 코드는 수 많은 ZILLIONS 모양을 만들었을 것이고 컴퓨터가 넘어 질 때까지 달릴 것입니다. 슬라이드에 채워진 각 도형을 복제하고 있지만, 복제 할 때 채워진 다른 도형을 만들고 있습니다. 그러면 채워진 도형을 만들고 복제 할 것입니다. .Select 라인은 병합에 필요한 두 가지 모양이 아니라 가장 최근에 만든 모양 만 선택합니다. 대신 슬라이드에 단색으로 채워진 모양의 배열 또는 컬렉션을 만든 다음 배열/컬렉션을 한 번에 하나씩 모양을 처리합니다. –

답변

1

이를 달성하기 위해 MergeShapes 방법을 사용할 수 있습니다 :

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) 
관련 문제