【问题标题】:vba powerpoint: change multiple shapes using the same 'with'vba powerpoint:使用相同的“with”更改多个形状
【发布时间】:2018-07-06 20:11:33
【问题描述】:

我有一个宏,我在其中创建了两个框,一个在幻灯片的顶部,一个在底部: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'用于多种形状?还是我必须完全不同?

【问题讨论】:

  • 使用单独的过程来格式化形状并将形状引用传递给它。

标签: vba powerpoint


【解决方案1】:

扩展我关于将形状引用传递给另一个过程的评论。

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

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 具有误导性。我真的应该先正确阅读这个问题。 :)

【讨论】:

  • 效果很好!非常感谢!尤其是我非常喜欢的第二个选项,使它更加压缩!
【解决方案2】:

将名称的Array() 传递给Shapes.Range() 允许您一次处理多个形状。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 2017-10-21
    • 2023-04-10
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多