Excel含有超出一百种你可以通过不同方式操作的对象。
所有的VB对象都被分层归类。一些对象本身又可能含有其它的对象,例如,Excel时一个应用对象,这个应用对象包含其它对象,例如工作簿或者命令条。工作簿对象可能包含其它对象,如工作表或者图表。
某些对象看上去相似。如果你打开一个新工作簿,检查它的工作表,你不会发现什么不同。一组相似的对象被称为“集合”。例如,工作表的集合包含所有具体工作簿中的工作表;命令条的集合包含所有的工具条和菜单。集合同样是对象。Excel中使用得最频繁的集合是表(Sheets)集合,它代表所有的工作表和图表,还有工作簿集合,工作表集合以及窗口集合。当你使用集合时,相同的动作可以在这个集合中所有的对象上执行。
每一种对象都有一些特征供你描述。在VB里,这些对象的特征被称为“属性”。例如,工作簿对象有名称属性;区域对象有列,字体,公式,名称,行,样式和值等属性。这些对象属性是可以设置的。你通过设置对象的属性控制对象的外观和位置。对象属性一次只能设置为一个特定的值。例如,当前工作簿不可能同时有两个不同的名称。VB中最难理解的部分是有些属性同时又可以是对象。想想区域(Range)对象,你可以通过设置字体颜色来改变选定单元格的外观。但是,字体(Font)可以有不同的名称(Times New Roman, Arial, …),不同的字号(10,12,14,…)和不同的样式(粗体,斜体,下划线,…)。这些是字体的属性。如果字体有属性,那么字体也是对象。
属性真是了不起,让你改变对象的外观,但是,如何控制这些操作呢?你在使Excel为你执行任务之前,你需要知道另外一个术语。对象有方法。每一种你想要对象做的操作都被称为“方法”。最重要的VB方法是Add方法。你可以使用这个方法添加一个新工作簿或者工作表。
对象可以使用不同的方法。例如,区域(Range)对象有专门的方法让你清除单元格内容(ClearContents方法), 清除格式(ClearFormats方法)以及同时清除内容和格式(Clear方法)。还有让你选择,复制或移动对象的方法。方法有可选择的参数确定方法执行的具体方式。例如,工作簿(Workbook)对象有一个叫关闭(Close)的方法。你可以使用它关闭任何打开了的工作簿。如果工作簿有改动,Excel会弹出一个信息,问你是否要保存变化。你可以使用关闭方法和设定它的保存变化(SaveChanges)参数为假(False)来关闭这个工作簿并且不管它的任何变化。正如例子:
Workbooks("Chap01.XLS").Close SaveChanges:=False
下面是VBA的Excel的对象模型图。注意,Application对象位于树型图的最上端,它实际上代表Excel本身。其它对象在较低的层次。
假设你想要控制Range对象,在你能够控制任何Excel对象之前,你必须对它创建引用。为了获得上图中的Range对象,只要遵照下面几行代码。每次看到树型图中的线指向不同的层时,你只要巧妙地将线换成一个逗点运算符(停顿,英文状态下的句号)。这样,最终你会以下面的方式到达Range对象:
Application.Workbook.Worksheet.Range
你可以使用Excel对象树型图来寻找到其它对象的路径,例如窗口(Window),批注(Comment),自动筛选(AutoFilter)或者绘图区(ChartArea)。分析对象模型是一个学习Excel对象的非常好的方法。你花在这里的时间,以后你开始编写VBA过程的时候,会给你加倍的回报。通常,你需要明确你引用的对象的名称。
现在,我们来点更具体的。假设你要清除单元格A4里的内容。手动做这个时,只要选择单元格A4然后按下键盘上的Delete键就可以了。用VB做同样的操作,你首先需要知道如何使Excel选中了正确的单元格。单元格A4和其它的工作表单元格一样,是Range对象。VB没有Delete方法来清除单元格内容,取而代之的是ClearContents方法,例如:
Range("A4").ClearContents
注意在对象名称和方法之间的逗点运算符。这个指令去除单元格A4里的内容。然而,如何使Excel清除工作簿Chap02.xls第一个工作表里单元格A4的内容呢?我们仍然假设打开了好几个工作簿。
如果你不希望最后在错误的工作簿或工作表里删除了A4里的内容,那么你必须写下详细的指令,这样VB就知道在哪里找这个单元格:
Application.Workbooks("Chap02.xls").Worksheets("Sheet1") .Range("A4").ClearContents
上面的指令应该写成一行,并且应该从右到左阅读:清除单元格A4里的内容,这个单元格在一个叫“Sheet1”的工作表里,而这个工作表又在一个叫“Chap02.xls”的工作簿里面,工作簿“Chap02.xls”又应该是Excel应用程序的一部分。注意,集合名称的后面带有一个字母“s”:Workbooks和Worksheets。所有引用的工作簿,工作表或单元格名称都必须用引号(英文状态的引号)包括起来。
既然现在你已经知道了VBA的一些基本组成要素(对象,属性和方法),是时间开始使用它们了。但是,你怎么将对象,属性和方法连接成正确的语言结构呢?每种语言都有语法规则,人们必须遵循语法以确保他们被理解了。无论你说的是英语,西班牙语,法语还是其它语言,你在读,写的时候都必须遵从一定的规则。在编程中,我们使用“句法”(syntax)这个术语来更确切地明确它的语言规则。你可以在在线帮助或者在对象浏览器窗口查找每个对象,属性或方法的句法。下面列出一些你必须了解的VB常用规则:
规则1:引用对象的属性
如果这个属性没有自变量,使用下面的句法:
Object.Property
对象是一个占位符,是你放置你想要进入的实际对象名称的地方。属性同样也是一个占位符,你可以在这里放置该对象的特点。例如:指向工作表中单元格A4中输入的值,见下述指令:
Range("A4").Value
注意对象名称和属性之间的句号。当你需要进入一个存在于多个其它对象里的对象的属性时,你必须按顺序地写上所有对象的名称,并且用 句号运算符分开。例如:
ActiveSheet.Shapes(2).Line.Weight
这个例子指向当前工作表里图形(Shapes)集合里的第二个对象里的直线(Line)对象的粗细(Weight)属性。
有些属性要求一个或多个自变量。例如,使用偏移(Offset)属性,你可以选择一个和当前单元格相对位置的单元格。Offset属性需要两个自变量,第一个自变量为行号(rowOffset)第二个是列号(columnOffset)。
对象 属性 自变量
ActiveCell.Offset(3, 2)
在上面的例子中,假设当前单元格是A1,Offset(3, 2)将会指向往下3行和往右两列的单元格,也就是单元格C4。因为,在括号内的自变量总是很难理解,通常操作是将它们的名称也列上,见下例:
ActiveCell.Offset(rowOffset:=3, columnOffset:=2)
注意,自变量名称后面总是跟着一个冒号和一个等于号(:=)。如果你使用带名称的自变量,你可以任意顺序地列出它们,上面的指令也可以写成这样:
ActiveCell.Offset(columnOffset:=2, rowOffset:=3)
改后的指令没有改变意思,你仍然指向单元格C4。然而,如果你改变ActiveCell.Offset(3, 2)中自变量的次序,结果你会指向D3,而不是C4。
规则2:改变对象的属性
Object.Property = Value
Value是一个新的你要赋给该对象属性的值。这个值可以是:一个数字
Range("A4").Value = 25
上面的指令在当前工作表的单元格A4里输入数字25在引号里的文本
ActiveCell.Font.Name = "Times New Roman"
上面的指令将当前单元格字体改为Times New Roman
逻辑值(True或False)
ActiveCell.Font.Bold = True
上面的指令设置当前单元格的字体为粗体。
规则3:返回对象属性的当前值
Variable = Object.Property
Variable(变量)是VB将要储存属性设置的地方的名称。
变量 对象 属性
CellValue = Range(“A4”).Value
上面的指令将当前A4单元格里的值保存到变量CellValue。
规则4:指向对象的方法
如果该方法没有自变量,那么句法应该是:
Object.Method
对象是一个占位符,是你放置你想要进入的实际对象名称的地方。方法同样也是一个占位符,你可以在这里放置要对该对象的进行的操作的名称。例如,可以使用下述指令来清除单元格A4的格式(应该是内容):
对象 方法
Range("A4").ClearContents
如果该方法可以使用自变量来限制,那么句法为:
Object.Method (argument1, argument2, … argumentN)
例如,使用GoTo方法,你可以快速地选择工作表里的任何区域。GoTo方法的句法为:
Object.GoTo(Reference, Scroll) ‘对象.GoTo(参照, 窗口滚动)
Reference自变量是目标单元格或者区域,Scroll自变量可以设定为真(True)让Excel窗口滚动到该目标地址出现在窗口的左上角;或者设定为假(False),窗口不滚动(系统默认为False)。
例如,下面的VBA语句选择工作表Sheet1里的单元格P100,并且窗口滚动:
Application.GoTo _
Reference:=Worksheets("Sheet1").Range("P100"), _
Scroll:=True
上面的指令没有固定在一行,使用了一条特殊的线(下划线)将它分为几段。
使用VBA对象浏览器查看对象及其属性和方法
VBA中100多个对象,及每个对象的成员(属性和方法),你不必都去记忆它,只需有一个大概的了解。因为你在用VBE编写代码时,VBE会有所提示,另外,VBE还提供了一个对象浏览器让你浏览VBA过程中可用的对象,也可以查看它们的属性,方法和事件。
使用下面任何一种方法都可以访问对象浏览器:
I 按F2
II 选择“视图”-“对象浏览器”
III 点击工具条上的“对象浏览器”按钮
VBA中Application、workbook、worksheet、range是四个最常用的对象。
Application ↓
workbook ↓
worksheet ↓
range ↓
-End-