excel_vba_编程教程(完整版)-第22章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
软Excel VB参考”-“Excel对象模型”。(译者:2002版有全局的对象模型,2003版好像没有这个。)
除了Excel对象,你还可以使用Office,Forms和DAO,ADO对象模型。属于这些数据库(library)
中的对象都可以用在Excel中,也可以用在Office家族中的其它应用软件中。在十五章,你可以看
到使用DAO和ADO对象,从Excel进入Access数据库的例子。
44
… 页面 61…
图2-6 Excel对象(Worksheet)
技巧2-4 VBA 和 Excel 的早期版本
Excel在线帮助列出了Excel对象模型从早期版本以来的变化。许多对象,属性和方法都已经被更新
的,改进的特色所代替了。为了提供兼容性,被取代的对象已经被隐藏起来了(译者:它们仍然是
可用的)。打开VB编辑器窗口上的在线帮助,隐藏的对象同样可以在对象浏览器里找到。如果你在
对象浏览器窗口上单击右键,你可以选择显示隐藏成员的选项。你将在以后的章节中学习如何使用
对象浏览器。
7 句法和文法
既然现在你已经知道了VBA的一些基本组成要素(对象,属性和方法),是时间开始使用它们了。但
是,你怎么将对象,属性和方法连接成正确的语言结构呢?每种语言都有语法规则,人们必须遵循
语法以确保他们被理解了。无论你说的是英语,西班牙语,法语还是其它语言,你在读,写的时候
都必须遵从一定的规则。在编程中,我们使用“句法”(syntax)这个术语来更确切地明确它的语
言规则。你可以在在线帮助或者在对象浏览器窗口查找每个对象,属性或方法的句法。下面列出一
些你必须的VB常用规则:
如果这个属性没有自变量,使用下面的句法:
Object。Property
45
… 页面 62…
对象是一个占位符,是你放置你想要进入的实际对象名称的地方。属性同样也是一个占位符,你可
以在这里放置该对象的特点。例如:指向工作表中单元格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。
Object。Property = Value
Value是一个新的你要赋给该对象属性的值。这个值可以是:
Range(〃A4〃)。Value = 25
上面的指令在当前工作表的单元格A4里输入数字25
ActiveCell。Font。Name = 〃Times New Roman〃
上面的指令将当前单元格字体改为Times New Roman
ActiveCell。Font。Bold = True
上面的指令设置当前单元格的字体为粗体。
Variable = Object。Property
Variable(变量)是VB将要储存属性设置的地方的名称,你将在第三章里学习关于变量的知识。
变量 对象 属性
CellValue = Range(“A4”)。Value
上面的指令将当前A4单元格里的值保存到变量CellValue。
如果该方法没有自变量,那么句法应该是:
Object。Method
对象是一个占位符,是你放置你想要进入的实际对象名称的地方。方法同样也是一个占位符,你可
以在这里放置要对该对象的进行的操作的名称。例如,可以使用下述指令来清除单元格A4的格式(译
者:应该是内容):
对象 方法
Range(〃A4〃)。ClearContents
如果该方法可以使用自变量来限制,那么句法为:
Object。Method (argument1; argument2; … argumentN)
例如,使用GoTo方法,你可以快速地选择工作表里的任何区域。GoTo方法的句法为:
46
… 页面 63…
Object。GoTo(Reference; Scroll) ‘对象。GoTo(参照; 窗口滚动)
Reference自变量是目标单元格或者区域,Scroll自变量可以设定为真(True)让Excel窗口滚动到
该目标地址出现在窗口的左上角;或者设定为假(False),窗口不滚动(译者:系统默认为False)。
例如,下面的VBA语句选择工作表Sheet1里的单元格P100,并且窗口滚动:
Application。GoTo _
Reference:=Worksheets(〃Sheet1〃)。Range(〃P100〃); _
Scroll:=True
上面的指令没有固定在一行,使用了一条特殊的线(下划线)将它分为几段。下面的部分将讲述这
个。
8 打断很长的 VBA 语句
尽管一行VBA代码最多可以包含1024个字母,但是,为了使你个过程容易阅读,最好将长的语句打
断为两行甚至多行。VB使用一个专门的连续线(下划线)置于一行代码的末尾,表明下一行是这行
的连续。例如:
Selection。PasteSpecial _
Paste:=xlValues; _
Operation:=xlMultiply; _
SkipBlanks: =False; _
Transpose:=False
这个连续符是下划线,你必须在下划线之后带一个空格。
你可以在下述几种情况中使用连续符:
你不可以在冒号和等于号之间使用连续符,例如,下面的代码VB是不认的:
Selection。PasteSpecial Paste: _
=xlValues; Operation: _
=xlMultiply; SkipBlanks: _
=False; Transpose: _
=False Selection。PasteSpecial Paste: _
=xlValues; Operation: _
=xlMultiply; SkipBlanks: _
=False; Transpose: _
=False
同样,在引号之内的文本之间加连续符也是不对的,例如,下面的下划线的使用是无效的:
MsgBox 〃To continue the long instruction; use the _
line continuation character。〃
上面的指令应该打断为如下代码:
MsgBox 〃To continue the long instruction; use the 〃 & _
〃line continuation character。〃
9 了解 VBA 错误
在编写或编辑VBA过程之中,无论你多名小心,出错的可能性还是很打的。例如,你可以错误拼写
一语句,放错了一个逗号或引号,或者忘记了一个句号或右括号。这些类型的错误称为句法错误。
幸运的是,VB比较容易帮助你发现这种类型的错误。为了让VB在你输入一行代码后,自动帮你检测
语法的正确性,你需要在VB窗口的“工具”-“选项”里,确保勾选了“编辑器”页上的“自动语
法检测”。
47
… 页面 64…
图2-7 选项对话框的编辑器上的“自动语法检测”帮你检查VBA过程里的打字错误
当VB发现语法错误时,弹出一个错误信息框,并且将有误的代码行颜色变为红色(参见图2-8)或
者其它在选项对话框“编辑器格式”页设定的颜色。如果错误信息框上的解释不够清楚,你总是可
以点击“帮助”按钮寻求更多的帮助。再如果VB在线帮助无法给你提供正确的方向,那么返回你的
程序,仔细检查有误的那行代码是否漏掉了字母,引号,句号,冒号,等于号,左括号和右括号等。
图2-8 这个错误由于漏掉了常数xlCellType前面的括号而产生
48
… 页面 65…
图2-9 当VB试图在工作表或单元格区域里选择一个并不存在的单元格时,就会产生一个运行时间
错误
查找语法错误可能是烦人的并且费时的事情。有些语法错误只有在过程运行的时候才能被发现。在
试图运行你的过程的时候,VB可能找到那种因为使用了无效的自变量,或者是漏掉了那些需要成对
使用的指令如If语句和循环结构,而造成的错误。
技巧2-5:程序调试
你很可能不只一次听过“计算机程序里充满了错误”。在编程里,错误就被称为“bug”(错误,漏
洞),而“调试”(debug)则是给你的程序除错的过程。调试的第一步就是改正所有的语法错误。
VB提供了无数种工具,你可以使用它们来追踪和消除错误。在本章中,你将知道如何使用VB助手帮
助你在编写程序时出现尽可能少的错误;在第十三章中,你将学习如何使用专门的调试工具来捕获
你VBA程序里的错误。
除了语法错误外,还有其它两种错误:运行时间和逻辑。运行时间错误发生在过程运行的时候。图
2-9显示了一种典型的运行时间错误。运行时间错误经常发生在那些程序员在编写代码的时候没有
想到的情况。例如,当程序试图访问一个用户电脑上并不存在的驱动器或者文件,或者没有首先检
查是否用户插入软盘并关闭软驱口而试图复制一个文件到软盘,这时就会发生运行时间错误。
第三种错误——逻辑错误,通常不会发出明确的错误信息。过程可能没有语法错误,甚至运行无误,
然而,得到的却是错误的结果。逻辑错误通常非常难以查找,并且它藏得很隐秘,间歇发生,你不
能指望花几个小时,甚至几天,就能找到错误源。
10 查找帮助