2017-09-03 20 views
0

私はunionプロパティを使って2つの同じ図形を1つにマージしようとしています。コードをコンパイルすると、オブジェクト 'commandbar'のメソッド 'executemso'が失敗しました。私はvbaで新しくなっているので、誰かが私にこれを解決させる助けがあれば素晴らしいだろう。パワーポイントでvbaを使用して2つの図形をマージすると、

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行は、マージに必要な2つの図形ではなく、最も最近作成された図形のみを選択します。代わりに、スライド上に塗りつぶした立体図形の配列またはコレクションを作成し、配列/コレクションをステップ実行して一度に1つの図形を処理します。 –

答えて

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) 
関連する問題