形状(或图形图像)由三种不同的对象来表示:
对象 | 说明 |
---|---|
Shapes 集合 | 用于创建形状并循环访问给定工作表上的所有形状。 |
ShapeRange 集合 | 用于使用与在用户界面中处理多个形状的同一方法修改多个形状。 |
Shape 对象 | 用于设置或修改单个形状的格式。 |
设置形状的属性
形状的许多格式属性不是由直接应用于 Shape 或 ShapeRange 对象的属性设置的。 而相关的形状属性在第二级对象内进行组合,例如 FillFormat 对象,其中包含了与形状填充相关的所有属性;又如 LinkFormat 对象,其中包含了链接的 OLE 对象特有的所有属性。
要设置形状的属性,必须先返回代表相关形状属性集的对象,然后设置该返回的对象的属性。 例如,使用 Fill 属性返回 FillFormat 对象,然后设置 FillFormat 对象的 ForeColor 属性,从而设置指定形状的前景填充色,如以下示例所示。
Worksheets(1).Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
同时对多个形状应用属性或方法
在用户界面中,某些操作可以对选定的多个形状执行;例如,可以选定多个形状并同时设置它们各自的填充。 其他操作可以仅对选定的单个形状执行;例如,可以仅在选定单个形状的情况下才编辑形状中的文本。
在 Visual Basic 中,有两种方法可将属性和方法应用于一组形状。 这两种方式使您可以对若干形状执行在单个形状上能执行的所有操作,而不管是否可以在用户界面上执行这些操作。
如果该操作在用户界面上影响多个选定的形状,则要在 Visual Basic 中执行该操作时,只需先建立一个包含要使用的形状的 ShapeRange 集合,然后直接对该 ShapeRange 集合应用适当的属性和方法。
如果不能在用户界面上对多个选定的形状同时执行某个操作,则仍然可以在 Visual Basic 中通过以下方法来执行该操作:遍历包含要处理的形状的 Shapes 集合或 ShapeRange 集合,对集合中每个单独的 Shape 对象应用适当的属性和方法。
许多应用于 Shape 对象和 ShapeRange 集合的属性和方法在用于某些特定形状时会失败。 例如,如果将 TextFrame 属性应用于不能包含文本的形状,将会失败。
如果不确定 ShapeRange 集合中的每个形状都可以应用特定的属性或方法,请不要将属性或方法应用于 ShapeRange 集合。 如果要对形状集合应用一个这样的属性或方法,则必须在应用之前逐个测试集合中的每个形状,以确保形状的类型与所应用的属性或方法相匹配。
创建包含工作表上所有形状的 ShapeRange 集合
通过选定图形,然后使用 ShapeRange 属性来返回包含选定图形的 ShapeRange 对象,可创建包含工作表上所有 Shape 对象的 ShapeRange 对象。
Worksheets(1).Shapes.Select
Set sr = Selection.ShapeRange
在 Microsoft Excel 中,Shapes 集合的 Range 属性的 Index 参数不是可选的,所以不能用不带参数的该属性来创建包含 Shapes 集合中所有形状的 ShapeRange 对象。
对 ShapeRange 集合应用属性或方法
如果可以同时在用户界面上对多个选定的形状执行某种操作,则可以通过编程的方式创建一个 ShapeRange 集合,再应用适当的属性和方法以执行该操作。 以下示例将在 myDocument
上构建一个形状范围(其中包含名为“Big Star”和“Little Star”的形状),并向其应用渐变填充。
Set myDocument = Worksheets(1)
Set myRange = myDocument.Shapes.Range(Array("Big Star", _
"Little Star"))
myRange.Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientBrass
以下是对 ShapeRange 集合应用属性和方法时其行为方式的常规准则。
向集合应用方法的操作相当于向该集合中每个单独的 Shape 对象应用方法。
设置集合的属性值等于设置该范围内每个形状的属性值。
如果集合中所有形状的某一返回常数的属性值相同,则集合的该属性将返回单个形状的该属性值。 如果集合中所有形状的该属性值不相同,则返回"mixed"常数。
如果集合中所有形状的某一返回简单数据类型的属性值相同(例如 Long、 Single 或 String),集合的该属性将返回单个形状的该属性值。
只有当集合中正好存在一个形状时,才能返回或设置某些属性的值。 如果集合包含多个形状,将会发生运行时错误。 此情况通常发生在用户界面中与返回或设置属性等价的操作不能同时对多个形状进行时(例如,编辑形状中的文本或编辑任意多边形的点)。
设置在 ShapeRange 集合的辅助对象(例如 FillFormat 对象)下分组的形状的属性时,前面的准则也适用。 如果辅助对象表示可以在用户界面中的多个选定对象上执行的操作,则可以从 ShapeRange 集合返回该对象并设置其属性。
例如,可以使用 Fill 属性返回 FillFormat 对象,该对象表示 ShapeRange 集合中的所有形状的填充。 设置 FillFormat 对象的属性后,将同时设置 ShapeRange 集合中的所有单个形状的相同属性。
循环访问 Shapes 或 ShapeRange 集合
即使不能在用户界面上通过选择多个形状并执行某一命令来对这些形状同时进行某一操作,也可以通过以下过程以编程方式来执行该操作:遍历包含要处理的形状的 Shapes 或 ShapeRange 集合,对集合中的各个 Shape 对象应用适当的属性和方法。
以下示例将循环访问 myDocument
上的所有形状,并更改每个自选图形形状的前景色。
Set myDocument = Worksheets(1)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Next
下例构造了包含活动窗口中所有当前选定的图形的 ShapeRange 集合,并设置每个选定图形的前景色。
For Each sh in ActiveWindow.Selection.ShapeRange
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
Next
在 ShapeRange 中对齐、分布和组合形状
使用 Align 和 Distribute 方法可定位多个形状的相互位置或相对于包含它们的文档的位置。
使用 Group 方法或 Regroup 方法可根据多个形状创建一个组合形状。
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。