JSRUN 用代码说话

对象及电子表格单元格操作

编辑教程

对象及电子表格单元格操作

要在Excel里创建一些自定义应用程序,需要一些常用对象或者对象集合的工作知识,例如Range,Workbook (Workbooks),Worksheet (Worksheets),Window (Windows)和 Application

在前面部分,你开拓了学习VB的许多方法

这里有一个总结关于什么时候使用什么工具:

当你在一个现行VBA过程,对对象,属性或方法有疑义时按F1打开在线帮助如果你需要快速列出每个可用对象的属性和方法时

或者查找一个很难找到的过程时,使用对象浏览器如果你想要测试VBA并且立即查看VBA命令的结果时,激活立即窗口

Excel对象模型里的Range对象

图2-25 Excel对象模型里的Range对象

电子表格单元格操作

当你已经准备好编写你自己的VBA过程,将电子表格任务自动化的时候,你很可能是从寻求操作电子表格单元格的指令开始的

你需要知道如何选择单元格,如果在单元格输入数据,如何给单元格区域命名,如何设置单元格格式,以及如何移动,复制和删除单元格

虽然这些任务可以通过鼠标或键盘轻易执行,掌握VBA这些方面的技术需要一些练习

你必须使用Range对象来引用单个单元格,单元格区域,行或列

如果你看了Excel对象模型,你会注意到Range对象是另外一个大对象——Worksheet对象——的一部分

有三种属性让你访问Range对象:Range属性,Cells属性和Offset属性

使用Range属性

Range属性返回一个单元格或者单元格区域

引用必须是A1在引号里的样式(例如:”A1”)引用可以包括区域运算符冒号(例如:”A1:B2”)或者联合运算符逗号(例如:”A”,”B12”)

Range属性

使用Cells属性

当你要选择一个确定的单元格时,Cells属性要求两个自变量,第一个是行号,第二个是列号或者列字母

自变量输入在括号中

如果忽略自变量,Excel将会选择当前工作表的所有单元格

Cells属性

注意,在上面的例子中,你如何结合使用Range和Cells属性:

Range(Cells(6, 1), Cells(10, 1)).Select

在上面的例子里,第一个Cells属性返回单元格A6,而第二个返回单元格A10

Cells属性返回的单元格之后又当做Range对象的参数

结果Excel就选择了上面单元格为第一个Cells属性返回的结果和下面为第二个Cells属性返回单元格的区域了

工作表是单元格的集合,你也可以使用只带一个自变量的Cells属性来表示单元格在工作表所有单元集合中的位置

Excel按下列方式给单元格编号:单元格A1是工作表中的第一个单元格,B1是第二个,C1是第三个,等等

Cell256是第一行中的最后一个单元格

你也许会想起Excel只有256列

Cells

注意,Item是返回一个集合成员的属性

因为Item是一个集合的默认成员,你可以直接引用工作表单元格,而不必明确地使用Item属性

现在你发现了两种方法选择单元格(Range属性和Cells属性),你也许很迷惑为什么要使用更复杂的Cells属性呢?很明显Range属性更具有可读性,毕竟,你远在决定学习VBA之前就在Excel公式和
函数里面使用了Range引用

然而,当需要将单元格当做集合操作的时候,Cells属性则使用更方便

使用这个属性去访问单元格集合中的所有单元格或者单个单元格

使用Offset属性

另外一个引用工作表单元格非常灵活的方法是使用Offset属性

当工作表任务自动化时,你也许不知道某个单元格的确切地址

你如何能够选择一个你根本不知道地址的单元格?你可以让Excel基于当前选择的单元格来选择一个位置

Offset属性通过计算从开始选择的单元格向下或向上移动的具体行数,来得到新的区域

同样也可以从当前选择的单元格区域向右或向左移动具体的列数

Offset属性使用两个自变量来获得新单元格区域的地址

第一个自变量表示行偏移,第二个自变量则表示列偏移

我们来测试一下几个例子:

Offset属性

上面的第一个例子里,Excel选择的时单元格D2

一旦你输入了第二个例子,Excel选择了单元格C13

如果单元格A1和D15已经被选中了,你也可以将上面的两个例子改写为这样:

Selection.Offset(1, 3).Select  
Selection.Offset(-2, -1).Select

注意,上面第三个例子里的第二个自变量是0,第一个或第二个自变量为0时,Offset属性相应表示当前行或当前列

如果当前活动单元格在第一行,那么指令ActiveCell.Offset(-1, 0).Select会导致错误

当使用Offset属性时,你可能有时需要改变选择区域的大小

假设开始选择的区域是A5:A10,如何将选择区域向下移动两行,向右移动两列,然后再改变新选择区域的大小呢?假设新的选择区域应该是C7:C8

Offest属性只能完成前面部分,后面部分要求另外一个属性来完成

Excel有个专门的Resize属性,你可以结合Offset属性和Resize属性来回到上面的问题

在你结合这两个属性之前,我们先来看看如何独立地使用它们:

1.将Excel窗口和VB窗口并排显示
2.激活立即窗口,并且输入下述指令:

Range("A5:A10").Select  
Selection.Offset(2, 2).Select  
Selection.Resize(2, 4).Select

上面的第一条指令选择区域A5:A10,当前活动单元格是A5

第二条指令将选区偏移到C7:C12

单元格C7处于活动单元格A5的向下两行和向右两列

现在,活动单元格是C7

最后一条指令将当前选区改变大小,单元格区域C7:C8被选中了,而不再是C7:C12

象Offset属性一样,Resize属性也需要两个自变量

第一个是你要选取的行数,第二个则是要选取的具体列数因此,指令Selection.Resize(2, 4).Select将当前选择区域改为两行和四列 后面两行指令可以结合成下面方式:

Selection.Offset(2, 2).Resize(2, 4).Select

上面的例子,先是Offset属性计算得到新区域的起始点(译者:选区左上角的单元格),接着是Resize属性决定新选区的大小,然后是Select方法选取具体的单元格区域

技巧:录制单元格的选择

宏录制器默认地使用Range属性录制选择单元格

如果你打开宏录制器,并且选择单元格A2,输入“text”,再选择单元格A5,你将在VB编辑器窗口里得到下述代码:

Range("A2").Select  
ActiveCell.FormulaR1C1 = "text"  
Range("A5").Select

如果你使用相对引用方式,宏录制器会使用Offset属性

你可以在录制前,点击宏录制工具条上的相对引用按钮

宏录制器将得到如下代码:

ActiveCell.Offset(-3, 0).Range("A1").Select  
ActiveCell.FormulaR1C1 = "text"  
ActiveCell.Offset(3, 0).Range("A1").Select

当你使用相对引用方式录制宏时,过程总是会选择相对于当前活动单元格的单元格

注意,上面指令中的第一和第三行的引用单元格A1,即使我们没有涉及到A1的任何东西

你可能记得,在第一章中,宏录制器用它自己的方式将事情搞定

为了将上面的指令变简单一些,你可以删除对单元格A1的引用:

ActiveCell.Offset(-3, 0).Select  
ActiveCell.FormulaR1C1 = "text"  
ActiveCell.Offset(3, 0).Select

使用相对引用来录制过程后,不要忘记再次点击这个按钮,如果下次录制一个非相对地址的过程

选择单元格的其它方法

如果你经常需要访问你工作表里某些遥远的单元格,你可能已经对下面的键盘快捷键很熟悉:End+上箭头, End+下箭头, End+左箭头和End+右箭头

在VBA中,你可以使用End属性快速地移动到遥远的单元格

单元格

注意,End属性要求一个自变量来表示你要移动的方向

使用下列Excel内置的常数来跳到具体的方向:xlright, xlleft, xlup, xldown

选择行和列

Excel使用EntireRow和EntireColumn属性来选择整行或整列

选择行和列

你选择了一个单元格区域,你也许想要知道选区包括多少行,多少列

我们来让Excel计算区域A1:D15中的行数和列数:

1. 在立即窗口里输入下述VBA语句

Range("A1:D15").Select

如果Excel窗口可见,当你按回车后,VBA会选中区域A1:D15

2.输入下列语句来得到选区的行数

?Selection.Rows.Count

一旦你回车,VBA在下一行显示结果

你的选择包括15行

3.输入下列语句来得到选区的列数

?Selection.Columns.Count

现在VBA告诉你,选中的区域A1:D15占据了四列的宽度

4.将光标放在关键字Rows或Columns中的任意位置,并且按下F1,获取这些有用属性的更多信息

获取工作表信息

Excel工作表有多大?它有多少单元格,列和行?即使你忘记了这些细节,使用Count属性

获取工作表信息

Excel 2002工作表里有16,777216个单元格,65,536行和256列

往工作表输入数据

输入工作表里的信息可以是文本,数字或者公式

你可以使用Range对象的两种属性之一来往单元格或单元格区域里输入数据:Value属性或者Formula属性

Value属性:

ActiveSheet.Range("A1:C4").Value = "=4 \* 25"

Formula属性:

ActiveSheet.Range("A1:C4").Formula = "=4 \* 25"

上面两种例子,A1单元格都显示4乘25的结果100

输入数据

返回工作表中的信息

毫无疑问,你在某些VB过程中可能需要返回单元格或者单元格区域的内容

虽然你既可以使用Value属性也可以使用Formula属性,但是,这次,Range对象的这两个属性是不可互用的

Value属性显示具体单元格中公式的结果

例如,如果A1中含有公式“=4*25”,那么指令?Range("A1").Value将会返回值100

如果你想要显示公式,而不是结果,那么你必须使用Formula属性:?Range("A1").Formula

Excel将会显示公式“=4*25”而不是结果100

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟