Microsoft Office VBA 学习日记(三):基础知识——对象

综述:
VBA对象也有它们可识别的属性和使用方法。工作表单元格是一个对象,它有一些可描述的功能(即它的属性),如它的位置、高度、所填充的颜色等。工作簿也是VBA对象,它有一些可用的功能(即它的方法),如打开、关闭工作簿,将图表或透视表添加到工作簿中。
在Excel 中,每天都会接触到Workbook对象、Worksheet对象和Range对象。你可能会将这些对象看成是Excel的全部,而不会真正认为它们是独立的。然而,Excel 本质上是将这些对象看成一个名为Excel对象模型的分层模型的部分。Excel对象模型是一组被清晰定义的对象,通过对象之间的关系可以将这些对象排列起来。

0.12.1 对象

  • Application: 代表整个应用程序(比如 Excel),是所有对象的根。
  • Workbook: 代表一个 Excel 工作簿。
  • Worksheet: 代表工作簿中的一个工作表。
  • Range: 代表工作表上的一个单元格或一系列单元格。
  • Chart: 代表一个图表。

在 Application对象中,Excel有 Workbook对象,在 Workbook对象中有Worksheet对象,在Worksheet对象中有Range对象。它们是分层结构中的所有对象。
要获得VBA中的特定对象,可遍历一下对象模型。例如,要获取 Sheet1中的单元格A1,需要输入下列代码:

Application.ThisWorkbook.Sheets("Sheet1").Range("A1").Select

大多数情况下,我们都清楚对象模型的层级,所以不需要把每一级都写出来。输入下述代码也可以得到单元格A1,因为Excel 会推断出你指的是活动工作簿和活动工作表:

 Range("A1").Select

0.12.2 属性

属性本质上就是对象的特征。房子会有颜色、面积、房龄等。有些属性可以改变——如房子的颜色。有些属性就不能修改——如房子的建成年份。
同样,Excel中的对象(如Worksheet对象)的表名属性可以改变,但Rows.Count行属性就不能改变。
通过引用某个对象及其属性就可以引用对象的属性了。例如,你可以通过改变工作表的Name属性来改变工作表的名称。

在这个例子中,将 Sheet1重命名为MySheet:

sheets(" Sheet1").Name="Mysheet"

有些属性是只读的,这意味着你不能直接给它赋值,比如,单元格的Text属性。Text属性直接给单元格指定了格式化了的值,你不能重写或修改。
有些带有参数的属性可以进一步指定属性的值。比如,下面这行代码就使用 RowAbsolute和ColumnAbsolute变量将单元格A1的Address属性返回为绝对引用(SA$1):

MsgBoxRange("A1").Address(RowAbsolute:=True,ColumnAbsolute:=True)

0.12.2.1 为活动对象指定属性

在使用 Excel 时,一次只能激活一个工作簿。在被激活的工作簿中,一次也仅能激活一个表。如果该表是工作表,就只有一个单元格是活动单元格(即使选中了多个单元格区域也是如此)。对活动工作簿、活动工作表和活动单元格有所了解后,将发现VBA还提供了引用这些活动对象的简便方法。
这种引用对象的方法非常有用,因为你不必知道所要操作的具体工作簿、工作表以及单元格区域。通过利用Application对象的属性,VBA可以轻松引用对象。例如,Application对象有一个ActiveCell 属性,可以返回对活动单元格的引用。下列指令将值1赋给了活动单元格:

ActiveCell.Value = 1

注意,在上述例子中,我们忽略掉了对Application对象和对活动工作表的引用,因为这两者都是默认的。如果该活动表不是工作表的话,这条指令就会失败。例如,如果激活图表工作表再让VBA执行这条语句,过程就会中断,出现一条错误消息。
如果在工作表中选定了区域,活动单元格就是所选区域内的一个单元格。也就是说,活动单元格永远是单个单元格(不可能是多个单元格)。
Application对象还有Selection属性,可以返回对任何所选对象的引用。这些对象可以是单个单元格(活动单元格)、一段区域内的单元格,或者类似ChartObject、TextBos、Shape这样的对象。
在这里插入图片描述
下列指令虽然不清楚活动单元格的位置,但同样可以清除活动单元格的内容:

ActiveCell.ClearContents

下面这条指令可显示出活动工作表的名称:

MsgBox ActiveSheet.Name

如果想知道活动工作簿的名称和目录路径,可以使用如下语句:

MsgBox ActiveWorkbook.FullName

如果选中了工作表中单元格的区域,通过执行一条语句就可以用值填充这个区域的单元格。在下面的例子里,Application对象的Selection属性返回与所选单元格相对应的Range对象。这条指令简单地修改了这个Range对象的Value属性,其结果是用单个值填充了所选中的单元格区域:

Selection.Value=12

注意,如果选中了其他对象(如ChartObject或者Shape),上述语句就会生成错误,因为ChartObject对象和Shape对象没有Value属性。
不过,下列语句会将值12填充到在选中非 Range对象之前就已经选中的Range对象中。如果在帮助系统中查找RangeSelection属性,会发现该属性仅能用于 Window对象:

ActiveWindow .RangeSelection.Value =12

如果想知道活动窗口中选中了多少个单元格,则可以访问Count属性,具体如下所示:

MsgBox ActiveWindow.RangeSelection.Count

0.12.2.2 为活动对象使用方法

方法是可在对象上执行的动作。将方法当作动词会有助于你理解,比如你可以粉刷房子,在VBA中就可翻译成house.paint。
举个Excel方法的简单例子,Range对象的Select方法,如下所示:

Range("A1").Select

Range对象的Copy方法:

Range("A1").Copy

有些方法会带有参数,表明是如何应用它们的。例如,如果显式定义Destination参数,就可以更有效地使用Paste方法:

Activesheet.Paste Destination:=Range ( "B1")

0.12.3 集合

许多Excel对象都属于集合。例如,你的房子位于一个街区中,这个街区就是房子的集合。每个街区都位于城市中,这个城市就是街区的集合。Excel将集合看成对象本身。

在每个 Workbook对象中,都会有Worksheet集合。Worksheet,集合是一个可通过 VBA调用的对象。Workbook对象中的每个Worksheet对象都位于Worksheet集合中。

如果你想引用 Worksheet 集合中的一个 Worksheet对象,可以通过它在集合中的位置来引用它,如从1开始的索引号,或将它的名称作为引用文本。如果你在只包含了一个名为MySheet的工作表的工作簿中运行下面两行代码,会发现它们所做的事是一样的:

worksheets(1).select
worksheets("MySheet").Select

同理,如果活动工作簿中有两张工作表,分别名为 MySheet和 YourSheet,输入下列任意一行语句都可以引用第二个工作表:

worksheets(2).Select
worksheets("YourSheet").Select

如果你想引用某个不活动工作簿中的名为MySheet的工作表,就需要限定工作表的引用和工作簿的引用:

workbooks("MyData.xlsx"),worksheets( "MySheet").Select

0.12.4 Range对象

0.12.4.1 Range对象的属性

打开VB编辑器,单击菜单栏中的“帮助”“Microsoft Visual Basic for Application帮助”,将会进入到Microsoft Developer Network(MSDN)网站。在 MSDN上,搜索Range可以看到与Range对象相关的网页。你会看到Range对象有3个属性,可用来通过VBA处理工作表。

  • Worksheet或 Range类对象的Range属性
  • Worksheet对象的Cells属性
  • Range对象的Offset属性

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值