使用形状(绘图对象)

   

形状或绘图对象由三种不同的对象表示:Shapes 集合、ShapeRange 集合和 Shape 对象。通常,Shapes 集合用于创建形状并对幻灯片中的所有形状进行重复操作;Shape 对象用于修改单个形状;而 ShapeRange 集合用于修改多个形状,就象在用户界面中使用多个选定的形状一样。

设置形状的属性

形状的许多格式属性不是由直接应用于 ShapeShapeRange 对象的属性设置的。相反,相关的形状属性在第二级对象内进行组合。例如 FillFormat 对象,其中包含了与形状填充相关的所有属性;又如 LinkFormat 对象,其中包含了链接的 OLE 对象的所有特有属性。若要设置一个形状的属性,必须先返回代表相关形状属性的对象,然后设置该返回的对象的属性。例如,使用 Fill 属性返回 FillFormat 对象,然后设置 FillFormat 对象的 ForeColor 属性,从而设置指定形状的前景填充色,如以下示例所示。

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

同时对多个形状应用属性或方法

在用户界面中,有些操作可以对选定的多个形状执行;例如,可以选定多个形状并同时设置它们各自的填充。其他些操作则只能对选定的单个形状执行;例如,只有选定单个形状时才能编辑其中的文本。

在 Visual Basic 中,对一组形状应用属性和方法有两种方式。这两种方式使您可以对若干形状执行在单个形状上能执行的所有操作,而不管是否可以在用户界面上执行这些操作。

许多应用于 Shape 对象和 ShapeRange 集合的属性和方法在用于特定形状时会失败。例如,如果将 TextFrame 属性应用于不能包含文本的形状,将会失败。如果不能确定特定的属性或方法对 ShapeRange 集合中的每个形状都能应用,则不要对 ShapeRange 集合应用于该属性或方法。如果确实要对形状集合应用一个这样的属性或方法,则必须在应用之前逐个测试集合中的每个形状,以确保形状的类型与所应用的属性和方法相匹配。

对 ShapeRange 集合应用属性和方法

如果可以同时在用户界面上对多个选定的形状执行某种操作,则可以通过编程的方式创建一个 ShapeRange 集合,再应用适当的属性和方法以执行该操作。以下示例在 myDocument 中创建一个包含自选图形“Big Star”和“Little Star”的形状区域,并对它们应用过渡填充。

Set myDocument = ActivePresentation.Slides(1)
Set myRange = myDocument.Shapes _
    .Range(Array("Big Star", "Little Star"))
myRange.Fill.PresetGradient msoGradientHorizontal, _
    1, msoGradientBrass

下面是将属性和方法应用于 ShapeRange 集合的一般原则。

设置组合在 ShapeRange 集合第二级对象中的形状的属性时,上述原则同样适用。例如 FillFormat 对象。如果第二级对象代表可在用户界面中对多个选定对象执行的操作,则可以从 ShapeRange 集合返回该对象并设置其属性。例如,可以使用 Fill 属性返回 FillFormat 对象,该对象代表 ShapeRange 集合中所有形状的填充。设置该 FillFormat 对象的属性将设置 ShapeRange 集合中所有形状的相同属性。

循环 Shapes 或 ShapeRange 集合

选择多个形状并执行某个命令,即使无法在用户界面中同时对多个形状执行一个操作,但可以用编程方式执行相同的操作。方法是:在包含要使用的形状的 Shapes 集合或 ShapeRange 集合中执行循环,然后对集合中的单个 Shape 对象应用适当的属性和方法。以下示例逐个检查 myDocument 中的所有形状,并在每个自选图形中添加文本。

Set myDocument = ActivePresentation.Slides(1)
For Each sh In myDocument.Shapes
    If sh.Type = msoAutoShape Then
            sh.TextFrame.TextRange.InsertAfter " (version 1)"
    End If
Next

以下示例创建包含当前窗口中所有选定形状的 ShapeRange 集合,并为集合中每个能够包含文本的形状设置文本。

For Each sh in ActiveWindow.Selection.ShapeRange
    If sh.HasTextFrame Then
        sh.TextFrame.TextRange = "Initially selected"
    End If
Next

在形状区域中对齐、布置、分组形状

使用 AlignDistribute 方法定位一组形状的相互位置或相对于包含它们的文档的位置。使用 Group 方法或 Regroup 方法从多个形状中创建单个形状组。