《10中文 Excel 2000 编程 24 学时教程.pdf》由会员分享,可在线阅读,更多相关《10中文 Excel 2000 编程 24 学时教程.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、下载第10学时Range对象在V B A代码中,用得最多的单独的对象可能就要算 R a n g e对象了。R a n g e对象是E x c e l的对象世界中真正的工作对象。作为 E x c e l用户,你将把大部分时间花在对 R a n g e对象的处理上。在本学时中,将学习多种对R a n g e对象进行处理的技术。本学时的重点包括: 理解R a n g e对象的作用 使用Wi t h语句 使用For Each语句 分析几个使用R a n g e对象的过程10.1 Range对象作为E x c e l用户,你基本上是和工作表上的单元格打交道。而在 V B A中,则称为和R a n g e
2、对象打交道。对于一个程序员来说,在所有的 E x c e l对象中,对R a n g e对象的处理是最频繁的。正因为如此,在本学时中,你将学习有关 R a n g e对象的各种知识。一个R a n g e对象可以是: 一个单独的单元格。 对单元格的选择。 多个选择。 一行或者一列。 一个3 D区域。10.1.1 Range对象的属性和学习其他对象一样,首先需要学习 R a n g e对象的一些属性和方法。 R a n g e对象最有用的一些属性如下: Address 本属性返回R a n g e的当前位置。 Count 本属性用于决定R a n g e中单元格的数目。 Formula 本属性返
3、回用于计算显示值的公式。 Offset 本属性对于从一个R a n g e移动到另一个R a n g e非常有用。 Resize 通过它可设置当前选中的R a n g e的大小。 Value 返回R a n g e的数值。在上面的程序清单中列出的属性只是 R a n g e对象属性很小的一部分,实际上, R a n g e对象的属性多达几十个。在下面的练习中,将熟悉 R a n g e对象的一些属性。在开始前,关闭所有的工作簿,并打开一个新的工作簿。接着从创建一个新的工作表开始:1)在单元格B 1中输入“1 0 0” ,在单元格B 2中输入“2 0 0” , 在单元格B 3中输入“3 0 0”
4、 。3)选中单元格B 4,并输入“= S U M ( B 1 : B 3 )” 。3)按下A l t + F 11键打开Visual Basic编辑器,在当前工作簿中插入一个新的模块。4)创建一个名为“R a n g e P r o p e r t i e s”的过程。5)为该过程输入如下代码:T h i s Wo r k b o o k . Wo r k s h e e t s ( S h e e t 1 ) . R a n g e ( A 1 ) . A c t i v a t eA c t i v e C e l l . O ff s e t ( 2 , 2 ) . A c t i v
5、a t eMsgBoxThe current active cell is & ActiveCell.AddressMsgBoxThe value of B4 is & Range(B4).Va l u eMsgBoxThe formula of B4 is & Range(B4).Formula6)回到工作簿的S h e e t 1,运行R a n g e P r o p e r t i e s过程。显示的第一个消息框告诉你激活的单元格为C 3,如图1 0 - 1所示。7)单击“确定”按钮,下一个消息框显示单元格 B 4的数值。8)单击“确定”按钮,最后一个消息框显示单元格 B 4的计算公式
6、。9)单击“确定”按钮,退出消息框。熟悉上面例子中显示信息的细微区别了吗?为了确保对本例中代码的理解,请花一点时间复习一下。程序清单1 0 - 1显示了完成后的过程。程序清单10-1 RangeProperties过程1: Sub RangeProperties ()2: ThisWo r k b o o k . Wo r k s h e e t s ( S h e e t 1 ) . R a n g e ( A 1 ) . A c t i v a t e3: ActiveCell.Off s e t ( 2 , 2 ) . A c t i v a t e4: MsgBox The curre
7、nt active cell is & ActiveCell.Address5 :6: MsgBox The value of B4 is & Range(B4).Va l u e7: MsgBoxThe formula of B4 is & Range(B4).Formula8: End Sub 84使用中文Excel 2000编程 2 4学时教程下载图10-1 将A d d r e s s属性用作创建消息框文本的内容在本过程中,做的第一件事是激活单元格 A 1:T h i s Wo r k b o o k . Wo r k s h e e t s ( S h e e t 1 ) . R a
8、 n g e ( A 1 ) . A c t i v a t e激活单元格A 1之后,用O ff s e t方法移动到单元格 C 3,并且在消息框中显示新激活的单元格的地址:A c t i v e C e l l . O ff s e t ( 2 , 2 ) . A c t i v a t eMsgBox The current active cell is & ActiveCell.Address通过O ff s e t属性,可以移动到另一个R a n g e位置,这个属性的语法如下:r a n g e n a m e . O ff s e t (R o w O f f s e t , C
9、o l u m n O f f s e t)可选参数R o w O ff s e t和C o l u m n O ff s e t控制移动的方向。在本过程中,将这两个参数均设置为2,这就将R a n g e移动到了C 3。接下来是显示单元格B 4的数值和计算公式:MsgBox The value of B4 is &Range(B4).Va l u eMsgBox The formula of B4 is &Range(B4).Formula这两行代码很好地说明了R a n g e对象的Va l u e属性和F o r m u l a属性的区别。Va l u e属性返回显示在单元格中的数值,而
10、F o r m u l a属性则返回单元格中实际输入的公式。10.1.2 Range对象的方法R a n g e对象同样具有多种多样的方法,包括: Activate 激活一个R a n g e。 Clear 清除一个R a n g e的内容。 Copy 将一个R a n g e的内容复制到剪贴板。 Cut 将一个R a n g e的内容剪切到剪贴板。 PasteSpecial 将剪贴板的内容粘贴到R a n g e中。 Select 选择一个R a n g e。10.2 使用With语句现在,你对E x c e l中最常用的对象已经比较熟悉了。接下来,将学习一个结构,通过这个结构可以使对对象的
11、处理更为容易。当对 R a n g e对象进行处理时,一个最普通的任务是设置各种各样的属性。程序清单1 0 - 2显示了用于对R a n g e对象执行各种格式设置的代码的例子。程序清单10-2 设置R a n g e对象格式的代码1: Range(A1:A6).NumberFormat = #,#0.002: Range(A1:A6).Font.Name = Courier New 3: Range(A1:A6).Font.FontStyle = Regular4: Range(A1:A6).Font.Size = 115: Range(A1:A6).Font.Strikethrough =
12、 False6: Range(A1:A6).Font.Superscript = False7: Range(A1:A6).Font.Subscript = False8: Range(A1:A6).Font.OutlineFont = False9: Range(A1:A6).Font.Shadow = False10: Range(A1:A6).Font.Underline = xlUnderlineStyleNone11: Range(A1:A6).Font.ColorIndex = xlAutomatic如果需要输入程序清单 1 0 - 2中的代码,你很快就会对重复地输入 R a n
13、g e (“A 1 : A 6”)感到第10学时 Range 对象使用85下载厌烦。可以用对象变量来引用 R a n g e ( A 1 : A 6 ),但是仍然需要重复地输入对象变量的名字。V B A提供了一种避免这样的方式Wi t h语句。Wi t h语句用于设置同一对象的多个属性,或者执行同一对象的多个方法。程序清单 1 0 - 3中显示了使用Wi t h语句完成同样功能的代码。程序清单10-3 Wi t h语句的例子1: With Range (A1:A6)2: .NumberFormat = #, #0.003: Wi t h . F o n t4: .Name = Courier
14、New5: .FontStyle = Regular6: .Size = 117: .Strikethrough = False8: .Superscript = False9 :.Subscript = False10: .OutlineFont = False11: .Shadow = False1 2 :.Underline = xlUnderlineStyleNone13: .ColorIndex = xlAutomatic14: End Wi t h15: End Wi t h虽然程序清单中的 Wi t h语句并没有减少代码的行数,但是减少了输入量。 Wi t h语句的语法如下:Wi
15、th objects t a t e m e n t sEnd Wi t h语法中的o b j e c t是s t a t e m e n t s部分中的属性和方法的操作对象。从程序清单 1 0 - 3中 可以看出,s t a t e m e n t s中的每一行都以符号“.”开始。同样需要注意的是,可以将Wi t h语句嵌套使用。在程序清单1 0 - 3中,针对F o n t对象的Wi t h语句嵌套在针对R a n g e对象的Wi t h语句中。程序清单1 0 - 4举例说明了如何在同一个Wi t h语句中使用属性和方法。程序清单10-4 包含属性和方法的Wi t h语句1: Sub W
16、i t h Worksheet ()2: With ThisWo r k b o o k3: .SaveAs Wi t h E x a m p l e 4: MsgBox Save Status: &.Saved5: End Wi t h6: End Sub 10.3 使用For Each语句Wi t h语句是用来执行同一个对象的多个语句,而 For Each语句则是用来对多个对象执行同一条语句。通过For Each语句,可以对集合中的每个元素重复执行同样的语句。For Each语句也可用于数组。For Each语句的语法如下:For Each e l e m e n t In g r o u
17、 p86使用中文Excel 2000编程 2 4学时教程下载 S t a t e m e n t s Exit For S t a t e m e n t s Next 注意,该语法支持Exit For从句。和其他E x i t从句一样,Exit For从句通常位于一条I f语句中。如果需要改变R a n g e中每个单元格的数值,可以使用程序清单 1 0 - 5中的代码。程序清单10-5 For Each语句的例子1: Sub ForExample ()2: Dim x As Range3 :4: For Each x In ThisWo r k b o o k . Wo r k s h e
18、 e t s ( S h e e t 1 ) . R a n g e ( A 1 : A 6 )5: x.Value = x.Value + 106: Next7: End Sub 10.4 Range对象编程示例在本部分中,你将看到多个使用R a n g e对象的代码示例。这些代码示例都经过了精挑细选,是程序员最常用的。第一个代码示例是改变一个 R a n g e中每行的格式设置。对于一张很长的工作表,为了使它易于查看和打印,常常需要这样做。在本例中,假设已经有了一张和图1 0 - 2相似的工作表,注意第一行是标题。需要将从第三行开始的内容隔行加粗。完成这一任务的过程请参看程序清单1 0 -
19、 6。程序清单10-6 使用R o w对象和For Next语句1: Sub BoldEveryOther ()2: Dim iCounter As Integer第10学时 Range 对象使用87下载图10-2 将用B o l d E v e r y O t h e r过程对本工作表进行处理3 :4: For iCounter = 3 To ThisWo r k b o o k . Worksheets (Sheet1). _Range(A1:C25).Rows.Count Step 25: ThisWo r k b o o k . Wo r k s h e e t s ( S h e e
20、 t 1 ) . R a n g e ( A 1 : C 2 5 ) . _Rows(iCounter).Font.Bold = Tr u e6: Next7 :8: End Sub 本过程中主要的关键在于For Next语句。注意i C o u n t e r设置的初始值为3,即从第三行开始隔行加粗。S t e p的值为2决定了是隔行加粗。图1 0 - 3显示了该过程运行后的工作表。你也许已经意识到,如果知道需要处理的R a n g e对象的地址,那么本例中的代码非常适用。但是如果不知道R a n g e对象的大小时,又应该怎么办呢?有关这方面的一个经典的例子是,当从其他应用程序(例如数据库
21、)向工作表中导入数据时的情况,你也许并不知道会返回多少行数据。程序清单1 0 - 7中的代码显示了选中一个不知道大小的 R a n g e的例子。程序清单10-7 选中一个不知道大小的R a n g e1: Sub SelectRange ()2: ThisWo r k b o o k . Wo r k s h e e t s ( S h e e t 1 ) . R a n g e ( A 1 ) . A c t i v a t e3: ActiveCell.CurrentRegion.Select4: MsgBoxThe address of the selected range & Sel
22、ection.Address5: End SubS e l e c t R a n g e的关键之处在于C u r r e n t R e g i o n属性的使用,本属性返回第一个空行和空列所包围的区域。通过选中C u r r e n t R e g i o n,用不着知道R a n g e的大小。最后一个过程将执行复制/粘贴操作。在程序清单1 0 - 8的代码中,对选中的区域进行复制,并且将复制的内容粘贴到工作表的另一位置。88使用中文Excel 2000编程 2 4学时教程下载图10-3 B o l d E v e r y O t h e r过程运行后,R a n g e对象具有了理想的
23、格式程序清单10-8 复制和粘贴一个区域1: Sub CopyAndPaste ()2: Selection.Copy3: Range(F3).Select4: ActiveSheet.Paste5: Application.CutCopyMode = False6: End Sub语句S e l e c t i o n . C o p y将选中的区域放到剪贴板上。下一步是移动到粘贴所复制的内容的理想位置。接着用P a s t e方法将所复制的区域从剪贴板复制到新的位置上。最后,将 A p p l i c a t i o n对象的C u t C o p y M o d e属性设置为F a l
24、s e。如果不这样做,源文本周围的选取框(移动的虚线)将一直保持,并且状态栏上将一直显示移动目标的指令。10.5 学时小结到目前为止,你对R a n g e对象的处理应该是得心应手了,因为你已经在多个过程中练习了R a n g e对象的几个属性和方法。你还学习了两个V B A的结构,通过它们可以使对象的处理更加简化。 Wi t h语句用于为同一对象设置多个属性或者执行多个方法,而 For Each语句则为多个对象执行同样的语句。在本学时的最后一部分,学习了几个对 R a n g e对象进行处理的过程,这些过程为 R a n g e对象的用法提供了示例。10.6 专家答疑问题:为什么没有R a
25、n g e集合?解答:集合的一个必要条件是可以添加元素。工作表上的单元格(也就是 r a n g e)的数目是由M i c r o s o f t预先定义的,没有办法向工作表添加更多的单元格,正因为如此,没有 R a n g e集合。问题:F o r语句和For Each语句有什么不同?解答:首先,讨论一下这两条语句的共同点:它们都是多次执行相同的语句。而问题在于,它们有什么不同?对于 F o r语句而言,语句执行的次数是由一个起始数字和一个结束数字所控制,而For Each语句中语句执行的次数是由所操作的对象的数目或者数组的元素的数目所控制。10.7 课外作业思考题和练习题是为了使你能够进一
26、步地理解所学内容,答案请参考附录。10.7.1 思考题1)判断题:在V B A中R a n g e(区域)总是指多个单元格。2)根据一个R a n g e对象的地址访问另一个R a n g e对象时,要用到R a n g e对象的哪一个属性?3)如果需要增加R a n g e对象中每个单元格的数值,使用什么语句可以用最少的代码实现?4)什么属性可以根据一个R a n g e对象的位置选中另一个未知的R a n g e对象?5)怎样才能知道一个R a n g e对象中有多少个单元格?第10学时 Range 对象使用89下载6)删除R a n g e对象中的内容需要使用什么属性?7)你必须设置同一
27、对象的多个属性,完成这样的任务的最有效方式是什么?10.7.2 练习题打开一个新的工作簿,在工作簿的第一张工作表中输入如下数据:单 元 格数值单 元 格数值A 1I t e mB 1P r i c eA 2Wi d g e tB 21 5A 3G i d g e tB 35A 4G i z m oB 43A 5J u n kB 57A 6S t u ffB 69创建一个名为R e d u c e P r i c e s的过程。本过程必须将R a n g e ( B 2 : B 6 )中每个单元格的数值减5。如果价格小于或者等于0,将价格和项目名用红色粗体字显示。如果R a n g e中单元格的数值有小于或者等于0的,则显示一个消息框,让用户在结束过程前知道出了问题。运行并测试该过程。90使用中文Excel 2000编程 2 4学时教程下载