2017-09-03 3 views
0

Ich versuche, zwei gleiche Formen zu einem zusammenführen mit Union-Eigenschaft. Beim Kompilieren des Codes wird die Methode 'executemso' des Objekts 'Befehlsleiste' nicht angezeigt. Ich bin neu in vba, also wäre es toll, wenn mir jemand helfen würde, das zu beheben.Zwei Formen verschmelzen als Union mit VBA in 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

einfach es übrigens kompilieren würde auch nicht. Ihr Code hätte ZILLIONEN von Formen erstellt und ausgeführt, bis Ihr Computer umgefallen ist. Du duplizierst jede gefüllte Form auf der Folie, aber wenn du sie duplizierst, erschaffst du eine andere gefüllte Form ... die du dann duplizieren und anonst. In der Auswahllinie wird nur die zuletzt erstellte Form ausgewählt, nicht zwei Formen, die für die Zusammenführung erforderlich sind. Erstellen Sie stattdessen ein Array oder eine Sammlung der ausgefüllten Volumenkörperformen auf der Folie, und durchlaufen Sie dann das Array/die Kollektion, um die Shapes nacheinander zu verarbeiten. –

Antwort

1

können Sie die MergeShapes Methode verwenden, um dies zu erreichen:

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) 
Verwandte Themen