对象介绍

第8学时 对象介绍
3)按下Alt+F11键,打开VisualBasic编辑器。
  4)按下F1键,激活“帮助”。
  5)输入问题“什么是对象”。
  6)按回车键,从列出的主题中选择“MicrosoftExcel对象”,此时会显示一张详细的对象模型图,如图8-1所示


最常用的5个对象
  尽管在Excel的对象模型中包括100多个对象,但你会发现程序设计主要集中在如下五个对象上:
  * Application
  * Workbook
  * Worksheet
  * Range
  * Chart

Application对象代表Excel。使用Application对象可以控制应用程序级的设置、内置的Excel函数以及高级方法,例如InputBox方法。
  Workbook对象是指Excel中的工作簿,即是说Excel文件。在VBA环境中,不说打开一个文件,而称为打开一个工作簿;也不说保存一个文件,而称为保存工作簿。
  学习Excel时最先了解到的其中一点就是,Workbook中包括Worksheet。Worksheet是Workbook中独立的页,数据就保存在Worksheet中。
  Worksheet中包括单元格(Cell)。你也许会认为不得不编写大量的代码以对单元格对象进行控制,但是,实际上没有单元格这样的对象。有单元格属性,将在后面的学时中学到。相反,你将对范围(Range)对象进行处理。范围对象是指一个或者多个单元格。
  大多数Excel用户都使用Excel的图表功能,所以你经常需要处理图表(Chart)对象。用“图表向导”创建图表时所做的一切都可以通过VBA代码做到。

例如,要引用工作簿Book1中的工作表Sheet1上的范围A1,必须使用如下代码:
  Application.Workbooks("Book1").Worksheets("Sheet1").Range("A1")
  实际上,在大多数情况下,可以省略对Application对象的引用(Application.InputBox是一个例外)。可以通过如下代码引用范围A1:
  Workbooks("Book1").Worksheets("Sheet1").Range("A1")
  在代码中,并不总是需要使用完全限定的对象名。在某些情况下,例如在代码中某个工作表刚被激活时,可以使用如下较短的引用方式:
  Range("A1")
  如何限定对象取决于你的经验。限定一个对象必须可以将它和同名的对象区分开来。例如,你可能有两个工作簿,每个工作簿中都有一个名为Sheet1的工作表,在这种情况下,需要使用完整的限定名称以免混淆。


用如下代码:
  Range("A1").Value=100

DimsngValueAsSingle
  SngValue=Range("A1").Value


Workbooks("VBA Example").Open
某些方法是带参数的,而参数又可能是必须的或者可选的。例如,以下代码将工作簿保存为“CurrentBudget”:
  This Workbook.SaveAs Filename="Current Budget"
  你也许已经猜到,有时对方法的引用就像对专门为某个对象设计的过程和函数的使用。
  这也可以解释为什么有的方法具有参数,有的方法甚至还有返回值。

8.9.1  Add方法
  所有集合的一个共有特点是可以添加项目。通过添加可以在集合中创建新的元素。要在一个集合中创建新的元素,可以使用Add方法。例如,要添加一个新的工作簿,可以使用如下代码:
  Workbooks.Add
  这行代码等价于打开Excel的文件菜单并添加一个新的工作簿。要添加一个新的工作表到工作簿中,可以使用如下代码:
  Worksheets.Add

 8.9.2 Count属性
  集合支持一个非常有用的名叫Count的属性。Count属性保存集合中元素的数目。如果希望知道一个工作簿中包括多少张工作表,可以使用如下代码:
  Dimi WSCount As Integer
  IWSCount=Worksheets.Count
  你也许想知道为什么要使用Count属性。设想你正在创建一个应用程序,其中包含与一周的各个工作日相对应的工作表,当工作簿完成之后,可以通过使用Count属性来检测工作簿是否包括五张工作表。在这种情况下,可以使用类似程序清单8-4中的代码。
程序清单8-4  使用Count属性 

--------------------------------------------------------------------------------

  1: Sub CountWorkSheets ()
  2:   Dim iWSCount As Integer
  3:   Dim sMessage As String
  4:
  5:   iWSCount=Worksheets.Count
  6:
  7:   If iWSCount <> 7 Then
  8:     sMessage="The workbook contains"& iWSCount
  9:     sMessage=stessage &"It should contain 7 worksheets"
  10:     MsgBox sMessage
  11:   End If
  12: End Sub

 

 

9.1.2  Application对象有用的属性和方法
  你将发现Application对象有几种非常有用的属性和方法。其中一些属性如下:
  * ActiveWorkbook  返回当前活动的工作簿。
  * ActiveSheet  返回当前活动的工作簿中活动的工作表。返回的工作表可以是Excel支持的任何工作表类型,包括工作表和图表工作表。
  * ActiveCell  返回当前活动的工作簿中活动的工作表中活动的单元格。
  * ThisWorkbook  返回正在执行的过程所驻留的工作簿。
  * MailSystem  返回本系统所采用的邮件系统。当进行邮件自动化时本属性非常有用。
  * MailSession  用于检测用户是否登录了电子邮件。
  * OperatingSystem  当开发由Windows和Mac用户使用的VBA应用程序时,这个属性非常有用。可以用这个属性来决定所使用的操作系统,并且做出必要的改变。
  * Selection  用于决定当前选中了什么,可以是单元格、图表、图形对象等等。
  你已经使用过一个Application对象的方法—InputBox。InputBox方法可以显示一个输入框,并且可以指定返回值的数据类型。Application对象的其他有用的方法包括:
  * MailLogon和MailLogoff和MailSystem和MailSession属性配合使用,这两个方法可以登录和退出电子邮系统。
  * Quit  用于退出Excel。
  * Run  用来执行Excel4.0宏。

 

.2  Workbook对象
  现在,你已经知道Workbook对象代表Excel文件。正因为如此,你也许可以立刻想到需要使用Workbook对象来处理的各种类型的事件:打开、保存、打印和关闭。以下首先学习Workbook对象的一些最常用的方法,而不是从这个对象的属性开始学习。
  * Activate  本方法用来激活工作簿。
  * Close  用于关闭工作簿。
  * Save  用于保存工作簿。

  如果在使用Save方法之前没有保存过该工作簿,该工作簿将以它当前的名字保存。这意味着它将被保存为诸如Book1这样的名字。

  * SaveAs  用于保存工作簿。本方法和Save方法的区别在于本方法有几个有用的可选参数,包括Filename、FileFormat、Password、WriteResPassword和ReadOnlyRecommended。
  * PrintOut  本方法用于打印整个工作簿。
  * PrintPreview  本方法用于在打印预览中显示工作簿。


9.3  Worksheet对象
果希望对整个工作表进行某些格式设置,怎样才能选中工作表中的所有单元格呢?
  通过使用Cells属性可以做到。如果希望设置一张工作表上所有单元格的字体,可以使用如下代码:
  Worksheets("Sheet1").Cells.Font.Name="Arial"
  也许会用到以下三个Worksheet对象的方法:
  * Activate  激活工作表。
  * CheckSpelling  用于检查工作表中内容的拼写。
  * Delete  用于删除某个工作表。


第10学时 Range对象
而在VBA中,则称为和Range对象打交道。对于一个程序员来说,在所有的Excel对象中,对Range对象的处理是最频繁的。
  正因为如此,在本学时中,你将学习有关Range对象的各种知识。
  一个Range对象可以是:
  * 一个单独的单元格。
  * 对单元格的选择。
  * 多个选择。
  * 一行或者一列。
  * 一个3D区域。

 10.1.1  Range对象的属性
  和学习其他对象一样,首先需要学习Range对象的一些属性和方法。Range对象最有用的一些属性如下:
  * Address  本属性返回Range的当前位置。
  * Count  本属性用于决定Range中单元格的数目。
  * Formula  本属性返回用于计算显示值的公式。
  * Offset  本属性对于从一个Range移动到另一个Range非常有用。
  * Resize  通过它可设置当前选中的Range的大小。
  * Value  返回Range的数值。

 1)在单元格B1中输入“100”,在单元格B2中输入“200”,在单元格B3中输入“300”。
  2)选中单元格B4,并输入“=SUM(B1:B3)”。
  3)按下Alt+F11键打开VisualBasic编辑器,在当前工作簿中插入一个新的模块。
  4)创建一个名为“RangeProperties”的过程。
  5)为该过程输入如下代码:
1: Sub RangeProperties ()
  2:  ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate
  3:   ActiveCell.Offset(2,2).Activate
  4:   Msgbox "The current active cell is"& ActiveCell.Address
  5:
  6:   Msgbox "The value of B4 is"& Range("B4").Value
  7:   Msgbox "The formula of B4 is" & Range("B4").Formula
  8: End Sub

  6)回到工作簿的Sheet1,运行RangeProperties过程。显示的第一个消息框告诉你激活的单元格为C3,如图10-1所示。

 在本过程中,做的第一件事是激活单元格A1:
  ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate
  激活单元格A1之后,用Offset方法移动到单元格C3,并且在消息框中显示新激活的单元格的地址:
  ActiveCell.Offset(2,2).Activate
  Msgbox "The current active cell is" & ActiveCell.Address
  通过Offset属性,可以移动到另一个Range位置,这个属性的语法如下:
  rangename.Offset(RowOffset,ColumnOffset)
  可选参数RowOffset和ColumnOffset控制移动的方向。在本过程中,将这两个参数均设置为2,这就将Range移动到了C3。
  接下来是显示单元格B4的数值和计算公式:
  Msgbox "The value of B4 is" &Range("B4").Value
  Msgbox "The formula of B4 is" &Range("B4").Formula
  这两行代码很好地说明了Range对象的Value属性和Formula属性的区别。Value属性返回显示在单元格中的数值,而Formula属性则返回单元格中实际输入的公式。

 

10.1.2  Range对象的方法
  Range对象同样具有多种多样的方法,包括:
  * Activate  激活一个Range。
  * Clear  清除一个Range的内容。
  * Copy  将一个Range的内容复制到剪贴板。
  * Cut  将一个Range的内容剪切到剪贴板。
  * PasteSpecial  将剪贴板的内容粘贴到Range中。
  * Select  选择一个Range。


  在VBA代码中,用得最多的单独的对象可能就要算Range对象了。Range对象是Excel的对象世界中真正的工作对象。作为Excel用户,你将把大部分时间花在对Range对象的处理上。
  在本学时中,将学习多种对Range对象进行处理的技术。

  本学时的重点包括:
  * 理解Range对象的作用
  * 使用With语句
  * 使用For Each语句
  * 分析几个使用Range对象的过程

 

10.1  Range对象
  作为Excel用户,你基本上是和工作表上的单元格打交道。而在VBA中,则称为和Range对象打交道。对于一个程序员来说,在所有的Excel对象中,对Range对象的处理是最频繁的。
  正因为如此,在本学时中,你将学习有关Range对象的各种知识。
  一个Range对象可以是:
  * 一个单独的单元格。
  * 对单元格的选择。
  * 多个选择。
  * 一行或者一列。
  * 一个3D区域。

 10.1.1  Range对象的属性
  和学习其他对象一样,首先需要学习Range对象的一些属性和方法。Range对象最有用的一些属性如下:
  * Address  本属性返回Range的当前位置。
  * Count  本属性用于决定Range中单元格的数目。
  * Formula  本属性返回用于计算显示值的公式。
  * Offset  本属性对于从一个Range移动到另一个Range非常有用。
  * Resize  通过它可设置当前选中的Range的大小。
  * Value  返回Range的数值。
  在上面的程序清单中列出的属性只是Range对象属性很小的一部分,实际上,Range对象的属性多达几十个。在下面的练习中,将熟悉Range对象的一些属性。在开始前,关闭所有的工作簿,并打开一个新的工作簿。接着从创建一个新的工作表开始:
  1)在单元格B1中输入“100”,在单元格B2中输入“200”,在单元格B3中输入“300”。
  2)选中单元格B4,并输入“=SUM(B1:B3)”。
  3)按下Alt+F11键打开VisualBasic编辑器,在当前工作簿中插入一个新的模块。
  4)创建一个名为“RangeProperties”的过程。
  5)为该过程输入如下代码:
  ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate
  ActiveCell.Offset(2,2).Activate
  Msgbox "The current active cell is"& ActiveCell.Address
  Msgbox "The value of B4 is"& Range("B4").Value
  Msgbox "The formula of B4 is"& Range("B4").Formula
  6)回到工作簿的Sheet1,运行RangeProperties过程。显示的第一个消息框告诉你激活的单元格为C3,如图10-1所示。


 图10-1 将Address属性用作创建消息框文本的内容


  7)单击“确定”按钮,下一个消息框显示单元格B4的数值。
  8)单击“确定”按钮,最后一个消息框显示单元格B4的计算公式。
  9)单击“确定”按钮,退出消息框。
  熟悉上面例子中显示信息的细微区别了吗?为了确保对本例中代码的理解,请花一点时间复习一下。程序清单10-1显示了完成后的过程。

程序清单10-1  RangeProperties过程

--------------------------------------------------------------------------------

  1: Sub RangeProperties ()
  2:  ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate
  3:   ActiveCell.Offset(2,2).Activate
  4:   Msgbox "The current active cell is"& ActiveCell.Address
  5:
  6:   Msgbox "The value of B4 is"& Range("B4").Value
  7:   Msgbox "The formula of B4 is" & Range("B4").Formula
  8: End Sub


--------------------------------------------------------------------------------

  在本过程中,做的第一件事是激活单元格A1:
  ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate
  激活单元格A1之后,用Offset方法移动到单元格C3,并且在消息框中显示新激活的单元格的地址:
  ActiveCell.Offset(2,2).Activate
  Msgbox "The current active cell is" & ActiveCell.Address
  通过Offset属性,可以移动到另一个Range位置,这个属性的语法如下:
  rangename.Offset(RowOffset,ColumnOffset)
  可选参数RowOffset和ColumnOffset控制移动的方向。在本过程中,将这两个参数均设置为2,这就将Range移动到了C3。
  接下来是显示单元格B4的数值和计算公式:
  Msgbox "The value of B4 is" &Range("B4").Value
  Msgbox "The formula of B4 is" &Range("B4").Formula
  这两行代码很好地说明了Range对象的Value属性和Formula属性的区别。Value属性返回显示在单元格中的数值,而Formula属性则返回单元格中实际输入的公式。

 10.1.2  Range对象的方法
  Range对象同样具有多种多样的方法,包括:
  * Activate  激活一个Range。
  * Clear  清除一个Range的内容。
  * Copy  将一个Range的内容复制到剪贴板。
  * Cut  将一个Range的内容剪切到剪贴板。
  * PasteSpecial  将剪贴板的内容粘贴到Range中。
  * Select  选择一个Range。

 

10.2  使用With语句
  现在,你对Excel中最常用的对象已经比较熟悉了。接下来,将学习一个结构,通过这个结构可以使对对象的处理更为容易。当对Range对象进行处理时,一个最普通的任务是设置各种各样的属性。程序清单10-2显示了用于对Range对象执行各种格式设置的代码的例子。

程序清单10-2 设置Range对象格式的代码

--------------------------------------------------------------------------------


  1: Range("A1:A6").NumberFormat="#,##0.00"
  2: Range("A1:A6").Font.Name="Courier New"
  3: Range("A1:A6").Font.FontStyle="Regular"
  4: Range("A1:A6").Font.Size=11
  5: Range("A1:A6").Font.Strikethrough=False
  6: Range("A1:A6").Font.Superscript=False
  7: Range("A1:A6").Font.Subscript=False
  8: Range("A1:A6").Font.OutlineFont=False
  9: Range("A1:A6").Font.Shadow=False
  10: Range("A1:A6").Font.Underline=xlUnderlineStyleNone
  11: Range("A1:A6").Font.ColorIndex=xlAutomatic

 
程序清单10-3 With语句的例子

--------------------------------------------------------------------------------

  1: With Range ("A1:A6")
  2:    .NumberFormat="#, ##0.00"
  3:    WithFont
  4:       .Name="Courier New"
  5:       .FontStyle="Regular"
  6:       .Size=11
  7:       .Strikethrough=False
  8:       .Superscript=False
  9: .Subscript=False
  10: .OutlineFont=False
  11:       .Shadow=False
  12: .Underline=xlUnderlineStyleNone
  13:      .ColorIndex=xlAutomatic
  14:    End With
  15: End With

 

10.3  使用For Each语句
  With语句是用来执行同一个对象的多个语句,而For Each语句则是用来对多个对象执行同一条语句。通过ForEach语句,可以对集合中的每个元素重复执行同样的语句。

  For Each语句也可用于数组。

  For Each语句的语法如下:
  For Each element In group
  [Statements]
  [Exit For]
  [Statements]
  Next
  注意,该语法支持Exit For从句。和其他Exit从句一样,ExitFor从句通常位于一条If语句中。如果需要改变Range中每个单元格的数值,可以使用程序清单10-5中的代码。

程序清单10-5  For Each语句的例子

--------------------------------------------------------------------------------

  1:Sub ForExample ()
  2:   Dim x As Range
  3:
  4:   For Each x In ThisWorkbook.Worksheets("Sheet1").Range("A1:A6")
  5:     x.Value=x.Value + 10
  6:  Next
  7:End Sub


1:Sub BoldEveryOther ()
  2:    Dim iCounter As Integer
  3:
  4:    For iCounter=3 To ThisWorkbook.Worksheets("Sheet1")_
  Range("A1:C25").Rows.Count Step 2
  5:        ThisWorkbook.Worksheets("Sheet1").Range("A1:C25")._
  Rows(iCounter).Font.Bold=True
  6:    Next
  7:
  8: End Sub
本过程中主要的关键在于For Next语句。注意iCounter设置的初始值为3,即从第三行开始隔行加粗。Step的值为2决定了是隔行加粗。图10-3显示了该过程运行后的工作表。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值