友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
八万小说网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第17部分

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



        End Sub  
RmDir方法允许你从硬盘上删除不需要的文件夹。  

21 用对象浏览器来定位过程  

除了定位对象,属性和方法外,对象浏览器还是个定位在不同工程里面的过程非常方便的工具。下 
面的例子给你演示如何查看存在“Personal”工作簿里面的过程:  
1。  激活对象浏览器并且选择工程/库下拉列表里的Personal。(译者:因为我没有Personal这个文 
     件。。。)  

                                                                             
图2-22 对象浏览器列出所有在某个特定VBA工程里可用的过程  
对象浏览器的左边显示所选工程里面对象名称,而右边则列出了所有可用的过程。  
2。  双击NewFolder过程名称,VB将光标定位到该过程的第一行  
3。  关闭对象浏览器  

22 使用立即窗口  

在你开始创建一个完善的VBA过程前(在下一章),先来做一些热身练习,增加你的VBA词汇。你怎 
样才能学得快而且没有痛苦?你如何试验一下一些新学的VBA指令?这里有一些简短的,互动的语 
言练习:输入一个简单的VBA指令,Excel会检查并且将结果显示在下一行。我们开始来设定你的练 
习屏幕:  
1。  在VB编辑器窗口,选择“视图”-“立即窗口”  
在决定使用在你自己的VBA过程之前,立即窗口可以用来试验VB语言中不同的指令,函数和运算符。 
这是一个非常好的调试新语言的工具,你输入在这个窗口里面的指令,将会立即显示结果。  
立即窗口可以在VB编辑器窗口上任意移动,也可以设置为可连接的,这样它就会出现在相同的地方。 
可以通过选项对话框上的“可连接的”页来打开或关闭可连接设置。在VB编辑器窗口上按下Ctrl+G 
就可以快速访问立即窗口。立即窗口允许你输入VBA语句,并且测试它们的结果,而不需要写成一 
个过程。立即窗口就像一个草稿板,你可以用它测试你的语句。如果该语句输出了你希望的结果, 
你就可以将立即窗口上的语句复制到你的过程中去(或者,你也可以将语句拖曳到代码窗口,如果 
代码窗口是可见的)  

                                                  59 

… 页面 76…

2。  将Excel和VB编辑器窗口并排排列  
3。  在立即窗口里输入下述指令,并且回车  
    Worksheets(〃Sheet2〃)。Activate  
当你按下回车键,VB开始工作,如果你上面输入的语句是正确的话,VBA激活当前工作簿里的第二 
个工作表。工作簿底部的Sheet2这时应该是突出显示的。  
4。  在立即窗口,输入其它VBA语句并回车  
    Range(〃A1:A4〃)。Select  
你一旦按下回车,VB将选中当前工作表的A1,A2,A3和A4  
5。  在立即窗口里输入下述指令:  
    'A1:A4'。Value = 55  
当你按下回车,VB在A1:A4中的每个单元格里放置数字55。上面的语句是引用Range对象的一种所写 
方式,完整的语法可读性更强:  
    Range(〃A1:A4〃)。Value = 55  

                                                                                               
图2-23 将Excel和VB窗口并排排列让你可以观察指令的运行  
6。  在立即窗口输入下述指令:  
    Selection。ClearContents  
回车后,VBA清除所选单元格区域的内容,区域A1:A4现在是空的  
7。  在立即窗口输入下述指令:  
    ActiveCell。Select  
回车后,VB激活A1单元格  

                                                           
图2-24 在立即窗口里输入指令,一旦你按下回车键,指令就会被执行  

                                          60 

… 页面 77…

图2-24显示了上面练习中在立即窗口里输入的所有指令。你每次按下回车键后,Excel总是执行光 
标所在行的语句。如果你想要再次执行同一指令,那么点击该指令行的任意位置,回车。为了更多 
的练习,重新运行图2-24里语句,从立即窗口的第二行指令开始,点击合适的地方并回车,一个 
一个地执行这些指令。  

23 获取立即窗口里的信息  

到目前为止,你已经使用立即窗口执行操作了,这些操作也可以是手动地在工作表的任意区域点击 
鼠标并且输入数据。立即窗口也允许你问问题。假设你想要找到下面问题的答案:“现在选中的是 
哪些单元格?”,“当前单元格里的值是多少?”,“当前工作表的名称是什么?”,“当前窗口的编号 
是多少?”使用立即窗口,你可以轻易地找到这些问题,以及其它问题的答案。在前面的例子里, 
你输入了好几个指令,让我们返回立即窗口去问几个问题。Excel甚至在你关闭了立即窗口后还能 
记住你在立即窗口里输入的指令。当你退出Excel时,立即窗口的内容自动会被删除。  
1。   鼠标点击立即窗口第二行你输入Range(〃A1:A4〃)。Select的任意地方  
2。  回车,让Excel再次选择单元格A1:A4  
3。  在立即窗口新的一行输入下面的问题:  
    ?Selection。Address  
当你按回车,Excel不会选择工作表的任何东西,取而代之,立即窗口上会在另外一行显示该指令 
的结果。在该例中,Excel返回的是当前被选择的单元格的绝对地址(A1:A4)。问号(?)告诉 
Excel在立即窗口显示指令的结果。除了问号,你还可以使用Print关键字。让我们使用关键字Print 
问工作表名称  
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将当前选择区域改为两行和四列  
后面两行指令可以结合成下面方式:  
    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的任何东西。你可能记得,在第一章 
中,宏录制器用它自己的方式将事情搞定。
返回目录 上一页 下一页 回到顶部 1 2
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!