VBA PowerPoint:使用相同的'with'更改多个形状

  • 本文关键字:with PowerPoint VBA vba powerpoint
  • 更新时间 :
  • 英文 :


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

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

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

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

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

最新更新