按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
问工作表名称
4。 在立即窗口新的一行,输入下述问题:
Print ActiveWorkbook。Name
回车后,Excel在立即窗口新的一行输入了当前工作簿的名称。
找找应用程序的名称如何?Chap02。xls的父对象是谁?
5。 在立即窗口新的一行,输入下述问题:
?Application。Name
Excel会显示它自己的全名:Microsoft Excel
立即窗口也可以用来做一个快速计算
6。 在立即窗口新的一行,输入下述问题:
?12/3
回车后,Excel会在下一行显示该除法运算的结果。但是,万一你想立即知道3+2和12*8的结果呢?
你可以将它们输入在一行,而不必分成两行,例如:
?3+2:?12*8
注意,冒号将两个代码块分割开来。
当你按下回车键,Excel分别在立即窗口的两行显示结果5,96。
下面是你在立即窗口里输入的所有指令,以及Excel对你问题的回答:
Worksheets(〃Sheet2〃)。Activate
Range(〃A1:A4〃)。Select
'A1:A4'。Value = 55
Selection。ClearContents
ActiveCell。Select
?Selection。Address
A1:A4
Print ActiveWorkbook。Name
Chap02。xls
?Application。Name
Microsoft Excel
?12/3
4
?3+2:?12*8
61
… 页面 78…
5
96
要清除立即窗口里的指令,只要选中所有指令并且按下Delete键
24 学习对象
要在Excel里创建一些自定义应用程序,需要一些常用对象或者对象集合的工作知识,例如Range,
Workbook (Workbooks),Worksheet (Worksheets),Window (Windows)和 Application。在前面部
分,你开拓了学习VB的许多方法。这里有一个总结关于什么时候使用什么工具:
象浏览器
本章剩余的几页里有一些VBA语言训练,可以帮助你更好地理解VBA语法。如果你花些时间在立即窗
口过一遍这些语法训练,你将理解绝大部分。
图2-25 Excel对象模型里的Range对象
25 电子表格单元格操作
当你已经准备好编写你自己的VBA过程,将电子表格任务自动化的时候,你很可能是从寻求操作电
子表格单元格的指令开始的。你需要知道如何选择单元格,如果在单元格输入数据,如何给单元格
区域命名,如何设置单元格格式,以及如何移动,复制和删除单元格。虽然这些任务可以通过鼠标
或键盘轻易执行,掌握VBA这些方面的技术需要一些练习。你必须使用Range对象来引用单个单元格,
单元格区域,行或列。如果你看了Excel对象模型,你会注意到Range对象是另外一个大对象——
Worksheet对象——的一部分。有三种属性让你访问Range对象:Range属性,Cells属性和Offset
属性。
26 使用 Range 属性
Range属性返回一个单元格或者单元格区域。引用必须是A1在引号里的样式(例如:”A1”)引用
可以包括区域运算符冒号(例如:”A1:B2”)或者联合运算符逗号(例如:”A”;”B12”)
VBA操作 立即窗口输入
选择单个单元格(例如A5) Range(〃A5〃)。Select
选择一个单元格区域(例如A6:A10) Range(〃A6:A10〃)。Select
选择一些不相邻的单元格(例如A1; B6; C8) Range(〃A1; B6; C8〃)。Select
选择一些不相邻的单元格和单元格区域(例如 Range(〃A11:D11; C12; D3〃)。Select
A11:D11; C12; D3)
27 使用 Cells 属性
当你要选择一个确定的单元格时,Cells属性要求两个自变量,第一个是行号,第二个是列号或者
列字母。自变量输入在括号中。如果忽略自变量,Excel将会选择当前工作表的所有单元格。
62
… 页面 79…
VBA操作 立即窗口输入
选择单个单元格(例如A5) Cells(5; 1)。Select或Cells(5; A)。Select
选择一个单元格区域(例如A6:A10) Range(Cells(6; 1); Cells(10; 1))。Select
选择工作表中所有单元格 Cells。Select
注意,在上面的例子中,你如何结合使用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列。
VBA操作 立即窗口输入
选择单元格A1 Cells(1)。Select or Cells。Item(1)。Select
选择单元格C1 Cells(3)。Select or Cells。Item(3)。Select
选择单元格IV1 Cells(256)。Select or Cells。Item(256)。Select
选择单元格A2 Cells(257)。Select or Cells。Item(257)。Select
注意,Item是返回一个集合成员的属性。因为Item是一个集合的默认成员,你可以直接引用工作表
单元格,而不必明确地使用Item属性。
现在你发现了两种方法选择单元格(Range属性和Cells属性),你也许很迷惑为什么要使用更复杂
的Cells属性呢?很明显Range属性更具有可读性,毕竟,你远在决定学习VBA之前就在Excel公式和
函数里面使用了Range引用。然而,当需要将单元格当做集合操作的时候,Cells属性则使用更方便。
使用这个属性去访问单元格集合中的所有单元格或者单个单元格。
28 使用 Offset 属性
另外一个引用工作表单元格非常灵活的方法是使用Offset属性。当工作表任务自动化时,你也许不
知道某个单元格的确切地址。你如何能够选择一个你根本不知道地址的单元格?你可以让Excel基
于当前选择的单元格来选择一个位置。Offset属性通过计算从开始选择的单元格向下或向上移动的
具体行数,来得到新的区域。同样也可以从当前选择的单元格区域向右或向左移动具体的列数。
Offset属性使用两个自变量来获得新单元格区域的地址。第一个自变量表示行偏移,第二个自变量
则表示列偏移。我们来测试一下几个例子:
VBA操作 立即窗口输入
选择单元格A1下面一行和右边三列的单元格 Range(〃A1〃)。Offset(1; 3)。Select
选择单元格D15上面两行和左边一列的单元格 Range(〃D15〃)。Offset(…2; …1)。Select
选择当前单元格上面一行的单元格(同列) ActiveCell。Offset(…1; 0)。Select
上面的第一个例子里,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属性来回到上面的问题。在你结合这两个属性之前,
63
… 页面 80…
我们先来看看如何独立地使用它们:
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将当前选择区域改为两行和四列
后面两行指令可以结合成下面方式: