vba powerpoint:使用相同的 'with' 改变多个形状
vba powerpoint: change multiple shapes using the same 'with'
我有一个宏,我在其中创建了两个框,一个在幻灯片的顶部,一个在底部: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
None 我试过的选项都有效。有什么办法可以将 'with function' 用于多个形状?还是我必须完全不同地做?
扩展我对将形状引用传递给另一个过程的评论。
我还没有测试过,但它应该看起来像这样:
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
我有一个宏,我在其中创建了两个框,一个在幻灯片的顶部,一个在底部: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
None 我试过的选项都有效。有什么办法可以将 'with function' 用于多个形状?还是我必须完全不同地做?
扩展我对将形状引用传递给另一个过程的评论。
我还没有测试过,但它应该看起来像这样:
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