《excel_vba_编程教程(完整版)》

下载本书

添加书签

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 查找帮助
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架