Excel VBA教程:处理图形(绘图对象)

图形,或者说绘图对象,可由三种不同类型的对象来代表:Shapes集合、ShapeRange集合和Shape对象。通常情况下,可用 Shapes集合创建图形并在给定工作表上的所有图形中进行循环;可用 Shape对象修改单个图形或设置其格式;而用 ShapeRange集合可同时修改多个图形,就像在用户界面上处理多个图形一样。

设置图形的属性

图形的许多格式属性不是由直接应用于 Shape对象或 ShapeRange对象的属性设置的。实际情况是,相关的图形属性被组合到了第二级对象之下,例如包含所有关于图形填充格式的属性的 FillFormat对象,或包含所有对链接的 OLE对象为唯一的属性的 LinkFormat对象。若要设置图形的属性,就必须先返回代表一组相关图形属性的对象,然后设置返回对象的属性。例如,使用 Fill属性返回 FillFormat对象,然后再设置 FillFormat对象的 ForeColor属性来设置指定图形的填充前景色,如下例所示。


Worksheets(1).Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

同时对若干图形应用属性或方法

在用户界面上,可以对若干选定图形执行某些操作。例如,可以选定若干图形并同时设置每个图形的填充格式。但有些操作只能对单个选定图形执行。例如,一次只能编辑一个图形中的文本(如果选定一个图形)。

在 Visual Basic 中,可用两种方式对一组图形应用属性和方法。用这两种方式,可将任何可在单个图形上执行的操作用于若干图形,而不论该操作是否可在用户界面上执行。

许多应用于 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集合时)的一般准则。

当设置那些组合于 ShapeRange集合第二级对象(如 FillFormat对象)下的图形属性时,上述准则同样适用。如果第二级对象所代表的操作能在用户界面中的多个选定对象上同时执行,那么就能从 ShapeRange集合中返回该对象并设置其属性。例如,可用 Fill属性返回代表 ShapeRange集合中所有图形的填充格式的 FillFormat对象。如果设置此 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

在图形区域中对齐、分布和组合图形

使用Align方法和Distribute方法可按图形间的相对位置或按与文档的相对位置来定位一组图形。使用Group方法或Regroup方法可将一组图形构造为单个组合图形。

上页:Excel VBA教程:处理三维区域 下页:Excel VBA教程:处理活动单元格

Excel VBA教程:处理图形(绘图对象)

Excel VBA教程:处理活动单元格 Excel VBA教程:Worksheet对象事件
Excel VBA教程:页眉和页脚的格式代码 Excel VBA教程:ActiveX 控件
Excel VBA教程:“帮助”主题不可用 Excel VBA教程:“帮助”主题不可用
Excel VBA教程:“帮助”主题不可用 Excel VBA教程:“帮助”主题不可用
Excel VBA教程:单元格错误值 Excel VBA教程:内置对话框参数列表
Excel VBA教程:Hidden属性 Excel VBA教程:与语言相关的属性、方法和函数
Excel VBA教程:可用于 Visual Basic 的工作表函数列表 Excel VBA教程:新的事件
Excel VBA教程:新的方法(按字母顺序列出) Excel VBA教程:新的方法(按对象列出)
Excel VBA教程:新的对象 Excel VBA教程:新的属性(按字母顺序列出)
Excel VBA教程:新的属性(按对象排序) Excel VBA教程:为 Microsoft Excel 2002 开发人员提供的新增功能
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号