【问题标题】:VBA: Left and bottom align 2 shapes, then delete the shape in thebackgroundVBA:左右对齐2个形状,然后删除背景中的形状
【发布时间】:2014-06-30 22:31:57
【问题描述】:

我正在寻找一种方法来对在 powerpoint 中选择的两个形状执行以下操作。

  1. 取两个形状中前景中的形状(即更靠前的形状),然后将其与背景中的形状对齐。

2。删除背景中的形状。

到目前为止,我得到的是底部和左对齐的操作,如下所示:

Sub LeftandBottom_Align()

ActiveWindow.Selection.ShapeRange.Align msoAlignLefts, False
ActiveWindow.Selection.ShapeRange.Align msoAlignBottoms, False

End Sub

如何完成删除部分?

一点点基本解释就好了

【问题讨论】:

    标签: vba powerpoint


    【解决方案1】:

    您可以像这样删除最后面的形状:

    Dim oBackShape As Shape
    
    
    With ActiveWindow.Selection
    
        ' Get a reference to the rearmost of the two selected shapes
        ' so you can use it later to delete the shape
        If .ShapeRange(1).ZOrderPosition > .ShapeRange(2).ZOrderPosition Then
            Set oBackShape = .ShapeRange(2)
        Else
            Set oBackShape = .ShapeRange(1)
        End If
    
        ' Align the shapes
        ' .Align may not always work the way you'd expect it to
        ' so if not, ask
        .ShapeRange.Align msoAlignLefts, False
        .ShapeRange.Align msoAlignBottoms, False
    
    
    End With
    
        ' Delete the rearmost shape
        oBackShape.Delete
    

    【讨论】:

    • 嘿史蒂夫,非常感谢。这正是我现在想要做的。
    【解决方案2】:

    您可以使用Shapes ZOrderPosition Property 来确定背景中的形状

    Sub LeftandBottom_Align()
    
    ActiveWindow.Selection.ShapeRange.Align msoAlignLefts, False
    ActiveWindow.Selection.ShapeRange.Align msoAlignBottoms, False
    
    Dim i As Integer
    i = 2 'Assuming two shapes
    
     While i >= 1
     With ActiveWindow.Selection.ShapeRange(i)
    
        If (.ZOrderPosition = 1) Then
            .Delete
            Exit Sub
        End If
    
     i = i - 1
    
     End With
     Wend
    
    End Sub
    

    【讨论】:

    • 我认为这不会起作用,除非您碰巧选择了幻灯片上的前两个形状; .ZOrderPosition 为您提供幻灯片上的“堆叠”顺序,而不是在选定的 ShapeRange 内。例如,在幻灯片上绘制五个形状,选择最后绘制的两个并运行代码;没有任何内容被删除。
    • 可能是,但问题具体是关于两个选定的形状!
    • 两个选定的形状。是的。不过,不一定是幻灯片上的前两个形状。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多