在powerpoint中使用vba将两个形状合并为并集

在powerpoint中使用vba将两个形状合并为并集,vba,powerpoint,Vba,Powerpoint,我试图使用union属性将两个相同的形状合并为一个。编译代码时,显示对象“commandbar”的方法“executemso”失败。我是vba新手,如果有人能帮我解决这个问题,那就太好了 Sub ShapesUnion() Dim sld As Slide Dim shp As Shape For Each sld In ActivePresentation.Slides For Each shp In sld.Shapes If s

我试图使用union属性将两个相同的形状合并为一个。编译代码时,显示对象“commandbar”的方法“executemso”失败。我是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

您可以使用
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)

您可以使用
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)

顺便说一下,它也不会编译。你的代码会创建无数的形状并一直运行,直到你的计算机崩溃。您正在复制幻灯片上的每个填充形状,但在复制过程中,您正在创建另一个填充形状。。。然后,您将复制该形状,并继续。选择行将仅选择最近创建的形状,而不是合并所需的两个形状。相反,在幻灯片上创建实心填充形状的数组或集合,然后逐步通过数组/集合一次处理一个形状。顺便说一下,它也不会编译。你的代码会创建无数的形状并一直运行,直到你的计算机崩溃。您正在复制幻灯片上的每个填充形状,但在复制过程中,您正在创建另一个填充形状。。。然后,您将复制该形状,并继续。选择行将仅选择最近创建的形状,而不是合并所需的两个形状。相反,在幻灯片上创建实心填充形状的阵列或集合,然后逐步通过阵列/集合一次处理一个形状。