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