在VBA中使用Range对象
Range对象代表工作表中的单个单元格、多个单元格组成的区域甚至可以是跨工作表的单元格区域,该区域可以是连续的也可以是非连续的。
注意:虽然单元格是Excel操作的最基本单位,但是Excel中并不存在完全意义上的单元格对象。
47.3.1 引用单个单元格
在VBA代码中有多种引用单个单元格的方法。
I 使用“[单元格名称]”的形式
这是语法格式最简单的一种引用方式。其中单元格名称与在工作表单元格公式中使用的A1样式单元格地址完全相同,如[C5]代表工作表中的C5单元格。在这种引用方式中单元格名称不能使用变量。
II 使用Cells属性
Cells属性返回一个Range对象。其语法格式为:
Cells(RowIndex,ColumnIndex)
Cells属性的参数为行号和列号。行号是一个数值,其范围为1至1048576。列号可以是数值,其范围为1至16384;也可以是字母形式的列标,其范围为“A”至“XFD”。同样是引用C5单元格,可以有如下两种形式:
Cells(5,3)
Cells(5,"C")
注意:如果行号使用变量,那么在代码中需要将该变量定义为Single变量而不是Integer变量。由于工作表中最大行号为1048576,但是Integer变量的范围为-32,768到32,767,所以必须使用Single变量作为行号。
III 使用Range(单元格名称)形式
单元格名称可以使用变量或者表达式。在参数名称的表达式中可以使用“&”连接符,连接两个字符串,例如:
Range("C5")
resize函数vbaRange("C" & "5")
47.3.2 单元格格式的常用属性
常用的单元格格式有字体大小及颜、背景以及边框等,表格47-1中列出了相关的属性。
表格47-1 常用单元格格式属性
步骤1 在Excel中新建一个空白工作簿文件,按<Alt+F11>组合键切换到VBE窗口。
步骤2 在工程资源浏览器中插入“模块”,并修改其名称为“CellsFormatDemo”。
步骤3 在工程资源浏览器中双击模块CellsFormatDemo,在代码窗口中写入如下代码。
#001  Sub CellsFormat()
#002      With Range("A1:D6")
#003          With .Font
#004              .Size = 11
#005              .Bold = True
#006          End With
#007          .Borders.LineStyle = xlContinuous
#008      End With
#009  End Sub
步骤4 运行CellsFormat过程,将设置“A1:D6”单元格区域的格式为:11磅粗体字,并添加单元格边框线,如图47-9所示。
图47-9 设置单元格格式
代码解析:
第4行代码设置字体大小为11磅。
第5行代码设置使用粗体字。
第7行代码添加单元格边框线。
47.3.3 添加批注
Comment对象代表单元格的批注,是Comments集合的成员。Comment对象并没有Add 方法,在代码中添加单元格批注需要使用Range对象的AddComment方法。下述代码在活动单元格添加批注,内容为“ExcelHome”。
Activecell.AddComment "ExcelHome"
47.3.4 如何表示一个区域
Range属性除了可以返回单个单元格,也可以返回单元格区域。Range的语法格式如下:Range(Cell1, Cell2)
参数Cell1,必须为A1 样式引用,是一个单元格或者区域的名称字符串。参数Cell2,可选。可以是一个包含单个单元格、整列或整行的Range 对象,或是表示一个单元格或者区域的名称字符串。
如果引用以A3单元格和C6单元格之间所包含的单元格区域对象,可以使用如下几种方法:
Range("A3:C6")
Range([A3], [C6])
Range(Cells(3, 1), Cells(6, 3))
Range(Range("A3"), Range("C6"))
第一种引用方式Range("A3:C6")是最常用的方式,其中的冒号是区域运算符,其含义是以两个A1样式单元格为顶点的矩形单元格区域。由于单元格有多种不同的引用方法,所以产生了后三种不同的区域引用方法。
对于某个Range对象可以以其左上角单元格为基准,再次使用Range属性或者Cells属性返回一个新的单元格或者区域引用。常用的引用方式有如下几种:
Range(...).Cells(RowIndex,ColumnIndex)
Range(...)(RowIndex,ColumnIndex)
Range(...)(CellIndex)
Range(...).Range(...)
与Excel工作表中引用稍有不同的地方是上述引用方式中的参数RowIndex,ColumnIndex 和CellIndex可以是正整数,也可以是零值或者负值。
假定单元格区域为Range(“C4:F7”),如图47-10中的横线填充区域所示,该区域的左上角单元格(即C4单元格)成为新坐标体系中基准单元格,相当于普通工作表中的A1单元格,下面4个代码引用的对象均为D5单元格,即图47-10中的活动单元格。
Range("C4:F7").Cells(2, 2)
Range("C4:F7")(2, 2)
Range("C4:F7").Range("B2")
Range("C4:F7")(6)
参数是负值代表该单元格位于基准单元格的左侧区域或者上侧区域,例如Range("C4:F7")(-2,-1)代表工作表中的A1单元格。
利用Range对象的Range属性引用单元格区域理解起来稍显复杂,但是其引用规则与工作表中引用是完全相同的。Range("C4:F7").Range(“E6:H7”)代表新坐标体系中的E6:H7单元格区域,也就是图47-10中的斜线区域,这个引用相当于工作表中G9:J10单元格区域。
图47-10 Range属性的扩展应用
47.3.5 如何定义名称
在工作表公式中经常通过定义名称,来简化工作表单元格公式。本节所指的名称是单元格区域的定义名称。
Workbook对象的Names集合是由工作簿中的所有名称组成的集合。Add方法用于定义新的名称,参数RefersToR1C1用于指定单元格区域,格式为R1C1引用方式:例如:ActiveWorkbook.Names.Add _
Name:="data", _
RefersToR1C1:="=Sheet1!R3C1:R6C4"
除了Add方法之外,利用Range对象的Name属性也可以添加新的名称,其代码为:Sheets("Sheet1").Range("A3:D6").Name = "data"
47.3.6 选中工作表的指定区域
在VBA代码中经常要引用某些特定区域,CurrentRegion属性和UsedRange属性是两个最常用的属性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。