2017-09-03 45 views
0

我試圖通過使用聯合屬性合併兩個相同的形狀。在編譯代碼時,它顯示對象'commandbar'的方法'executemso'失敗。我是vba的新手,如果有人幫我解決這個問題,那將會很棒。兩個形狀合併爲使用vba的聯合在powerpoint

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

一樣好就不會被編譯的方式。你的代碼會創建幾百個形狀並運行,直到你的計算機崩潰。您正在複製幻燈片上的每個填充形狀,但是複製它之後,您將創建另一個填充的形狀......然後將其複製並粘貼。 .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)