《excel_vba_编程教程(完整版)》

下载本书

添加书签

excel_vba_编程教程(完整版)- 第26节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
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将当前选择区域改为两行和四列  
后面两行指令可以结合成下面方式:  
    Selection。Offset(2; 2)。Resize(2; 4)。Select  
上面的例子,先是Offset属性计算得到新区域的起始点(译者:选区左上角的单元格),接着是Resize 
属性决定新选区的大小,然后是Select方法选取具体的单元格区域。  
技巧2-6:录制单元格的选择  
宏录制器默认地使用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  
使用相对引用来录制过程后,不要忘记再次点击这个按钮,如果下次录制一个非相对地址的过程。  

29 选择单元格的其它方法  

如果你经常需要访问你工作表里某些遥远的单元格,你可能已经对下面的键盘快捷键很熟悉:End+ 
上箭头, End+下箭头, End+左箭头和End+右箭头。在VBA中,你可以使用End属性快速地移动到遥 
远的单元格。  
VBA操作                                   立即窗口输入  
选择任何行的最后一个单元格                ActiveCell。End(xlright)。Select  
选择任何列的最后单元格                    ActiveCell。End(xldown)。Select  
选择任何行的第一个单元格                  ActiveCell。End(xleft)。Select  
选择任何列的第一个单元格                  ActiveCell。End(xlup)。Select  
  
注意,End属性要求一个自变量来表示你要移动的方向。使用下列Excel内置的常数来跳到具体的方 
向:xlright; xlleft; xlup; xldown。  

30 选择行和列  

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

                                            64 

… 页面 81…

VBA操作                                  立即窗口输入  
选择当前活动单元格所在行的整行           Selection。EntireRow。Select  
选择当前活动单元格所在列的整列           Selection。EntireColumn。Select  
  
你选择了一个单元格区域,你也许想要知道选区包括多少行,多少列。我们来让Excel计算区域 
A1:D15中的行数和列数:  
1。  在立即窗口里输入下述VBA语句  
    Range(〃A1:D15〃)。Select  
如果Excel窗口可见,当你按回车后,VBA会选中区域A1:D15  
2。  输入下列语句来得到选区的行数  
    ?Selection。Rowsunt  
一旦你回车,VBA在下一行显示结果。你的选择包括15行  
3。  输入下列语句来得到选区的列数  
    ?Selectionlumnsunt  
现在VBA告诉你,选中的区域A1:D15占据了四列的宽度。  
4。  将光标放在关键字Rows或Columns中的任意位置,并且按下F1,获取这些有用属性的更多信息。  

31 获取工作表信息  

Excel工作表有多大?它有多少单元格,列和行?即使你忘记了这些细节,使用Count属性。  
VBA操作                                     立即窗口输入  
计算Excel工作表里总单元格数                 ?Cellsunt  
计算Excel工作表里总行数                     ?Rowsunt  
计算Excel工作表里总列数                     ?Columnsunt  
  
 Excel 2002工作表里有16;777216个单元格,65;536行和256列。  

32 往工作表输入数据  

输入工作表里的信息可以是文本,数字或者公式。你可以使用Range对象的两种属性之一来往单元 
格或单元格区域里输入数据:Value属性或者Formula属性。  
Value属性:  
    ActiveSheet。Range(〃A1:C4〃)。Value = 〃=4 * 25〃  
Formula属性:  
    ActiveSheet。Range(〃A1:C4〃)。Formula = 〃=4 * 25〃  
上面两种例子,A1单元格都显示4乘25的结果100。  
VBA操作                                     立即窗口输入  
在单元格A5里输入文本“Amount Due”          Range(〃A5〃)。Formula = 〃Amount Due〃  
在单元格D21里输入数字“123”                Range(〃D21〃)。Formula = 123   
                                            Range(〃D21〃)。Value = 123  
在单元格B4里输入公式“=D21*3”              Range(〃B4〃)。Formula = 〃=D21 * 3〃  
  

33 返回工作表中的信息  

毫无疑问,你在某些VB过程中可能需要返回单元格或者单元格区域的内容。虽然你既可以使用Value 
属性也可以使用Formula属性,但是,这次,Range对象的这两个属性是不可互用的。  
    令?Range(〃A1〃)。Value将会返回值100  
    Excel将会显示公式“=4*25”而不是结果100  

                                           65 

… 页面 82…

34 单元格格式  

一个频繁的任务就是给选中的单元格或区域设置格式。你的VBA过程可能需要查明某个具体单元格 
的格式。我们可以使用NumberFormat属性来找回单元格格式:  
    ?Range(〃A1〃)。NumberFormat  
在立即窗口输入上面的问题后,Excel显示“General”(译者:中文版本是“常规”,G/通用格式), 
它表示所选的单元格没有设置任何特殊的格式。要用VBA改变单元格格式,输入下列指令:  
    Range(〃A1〃)。NumberFormat = 〃#;##0。00〃  
如果你在单元格A1里输入125,当你使用上面的指令给它设置格式后,单元格A1将显示“125。00”。 
你可以在Excel窗口的“设置单元格格式”对话框里查找必要的格式代码(“格式”-“单元格”)。 
如果你要的格式没有列在“设置单元格格式”对话框里,那么请参考在线帮助,查找创建用户定义 
的格式指导。  

                                                              
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架