vba powerpoint:使用相同的“ with”更改多个形状

时间:2018-07-06 11:36:52

标签: vba powerpoint powerpoint-vba

我有一个宏,其中创建了两个框,一个在幻灯片的顶部,一个在底部:oBoxTop和oBoxBottom。

目前我有这样的东西:

Set oBoxTop = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
    With oBoxTop
         .TextFrame.TextRange.Text = "TEXT"
         .TextFrame.TextRange.Font.Color.RGB = RGB(255, 255, 255)
         .TextEffect.FontSize = 15
    End With

Set oBoxBottom = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
    With oBoxBottom
         .TextFrame.TextRange.Text = "TEXT"
         .TextFrame.TextRange.Font.Color.RGB = RGB(255, 255, 255)
         .TextEffect.FontSize = 15
    End With

由于两个框的格式都必须与我希望只用一个代码块来格式化的方式相同,而不是重复所有操作,即使只是稍微压缩一下代码。

由于幻灯片上还有其他形状不需要更改(只有刚创建的两个形状需要更改),因此我尝试了类似的操作

With oBoxTop & oBoxBottom

With oBoxTop and oBoxBottom

我尝试过的所有选项都没有起作用。有什么方法可以将“ with function”用于多种形状?还是我必须完全不同地做?

2 个答案:

答案 0 :(得分:2)

进一步说明将形状引用传递给另一个过程的评论。

我还没有测试过,但是应该看起来像这样:

Public Sub FormatShape(ShapeReference As Shape)

    With ShapeReference
         .TextFrame.TextRange.Text = "TEXT"
         .TextFrame.TextRange.Font.Color.RGB = RGB(255, 255, 255)
         .TextEffect.FontSize = 15
    End With

End Sub  

然后您可以调用此过程并将其传递给其他形状:

Sub Main()

    Set oBoxTop = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
    FormatShape oBoxTop

    Set oBoxBottom = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
    FormatShape oBoxBottom

    ' - - OR - -

    FormatShape oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
    FormatShape oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)

End Sub  

编辑:我已经更新了过程名称-PositionShape具有误导性。我真的应该先正确阅读问题。 :)

答案 1 :(得分:0)

将名称的Array()传递到Shapes.Range()可使您一次处理多个Shape。

Set oBoxTop = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)
Set oBoxBottom = oSld.Shapes.AddShape(msoShapeRectangle, 0, 0, 720, 13)

With oSld.Shapes.Range(Array(oBoxTop.Name, oBoxBottom.Name))
    .TextFrame.TextRange.Text = "TEXT"
    .TextFrame.TextRange.Font.Color.RGB = RGB(255, 255, 255)
    .TextEffect.FontSize = 15
End With