友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第34章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



示在第一行的语句Option Explicit。Option Explicit语句意味着在本模块里使用的所有变量都必 
须经过正式声明。你将在下一节里学习这个语句。删除Option Explicit语句后,重新运行该过程, 
运行后,切换到Excel界面,过程运行的结果应该和图3-1一致。  

                                         
图3-1 VBA过程可以在工作表里输入数据并计算结果  
单元格A8显示变量strMsg的内容。注意,在单元格B6里面输入的价格有两位小数,而strMsg的价格 
却显示三位小数。要在单元格A8里显示带两位小数的计算器价格,你必须给变量Cost设置需要的格 

                                           74 

… 页面 91…

式,而不是给该单元格设置格式。VBA有专门的函数让你改变数据格式,你将使用Format函数来改 
变变量Cost的格式。该函数的语法是:  
Format(expression; format)  
Expression(表达式)是你要设置格式的值或者变量;format(格式)则是你要使用的格式类型。  
1。  在CalcCost过程里更改变量Cost的计算:  
Cost = Format(slsPrice + (slsPrice * slsTax); 〃0。00〃)  
2。  将With…End With代码块取代为下述指令:  
Range(〃B6〃)。Formula = Cost  
3。  将语句Range(〃B5〃)。Formula = slsPrice * slsTax改为下面指令:  
Range(〃B5〃)。Formula = Format((slsPrice * slsTax); 〃0。00〃)  
4。  重新运行修改后的程序  
试验过程CalcCost之后,你可能会困惑,为什么我们要为声明变量烦恼,如果VB自己可以处理未声 
明的变量的话?因为过程CalcCost是如此之短,因此你不必担心VB每次使用这些Variant变量时会 
占用多少内存。然而,在短的过程中,内存问题不重要,但是当你输入变量名称时,你很可能出现 
错误。当你第二次使用Cost变量时,你忽略了“o”而写成“Cst”,后果会如何呢?  
Range(〃B6〃)。Formula = Cst  
如果你使用了Tax在下面的公式中,而没有用slsTax,结果你将得到什么呢?  
Cost = Format(slsPrice + (slsPrice * Tax); 〃0。00〃)  
引入上面提及的错误后过程CalcCost的结果显示在图3-2。  

                                         
图3-2 变量名称错误导致结果错误  
注意,在图3-2里,单元格B6没有数值,因为VB没有找到变量Cst的任务语句。再因为VB不知道销 
售税,显示的计算器价格为总价(而没有加税金,见单元格A8)。VB不会猜测,它只是简单地做你 
告诉它的事情。这带我们到下一个部分,解释如何避免这类错误。在你继续之前,确保更正变量Cst 
和Tax为Cost和slsTax。  

8 强制声明变量  

VB使用Option Explicit语句自动提醒你正式地声明你的变量,这个语句必须放在每个模块的最上 
面。如果你试图运行一个含有未定义的变量的过程时,Option Explicit语句会让VB产生一个错误 
信息。  
1。  返回代码窗口你输入过程CalcCost的地方  
2。  在模块的最上面输入Option Explicit并回车,Excel将该语句显示为蓝色  
3。  运行过程CalcCost,VB显示错误信息“编译错误:变量未定义”  
4。  点击确定关闭信息框。  
    VB加亮变量名称slsPrice。现在你需要正式声明这个变量。当你声明了变量slsPrice并再次运 
    行该过程时,VB一旦遇到另外一个未声明的变量时,将再次产生同样的错误。  
5。  在CalcCost过程的开始部分输入下述声明:  
     'declaration of variables (声明变量)  
     Dim slsPrice as Currency   
     Dim slsTax as Single   

                                           75 

… 页面 92…

     Dim Cost as Currency   
     Dim strMsg as String  
6。  按下F5来运行该过程,修改后的程序显示如下“  
Option Explicit   
Sub CalcCost()   
'declaration of variables   
       Dim slsPrice As Currency   
       Dim slsTax As Single   
       Dim Cost As Currency   
       Dim strMsg As String   
       slsPrice = 35   
       slsTax = 0。085   
       Range(〃A1〃)。Formula = 〃The cost of calculator〃   
       Range(〃A4〃)。Formula = 〃Price〃   
       Range(〃B4〃)。Formula = slsPrice   
       Range(〃A5〃)。Formula = 〃Sales Tax〃   
       Range(〃A6〃)。Formula = 〃Cost〃   
       Range(〃B5〃)。Formula = Format((slsPrice * slsTax); 〃0。00〃)   
       Cost = Format(slsPrice + (slsPrice * slsTax); 〃0。00〃)   
       With Range(〃B6〃)。Formula = Cost   
       strMsg = 〃The calculator total is 〃 & 〃〃 & Cost & 〃。〃   
       Range(〃A8〃)。Formula = strMsg   
End Sub   
在模块上面输入的Option Explicit语句强迫你声明变量,因为如果你需要声明变量的话,你必须 
每次在添加新模块时输入Option Explicit语句,所以你可以让VB帮你输入它。按照下述步骤来自 
动在新模块里添加Option Explicit语句:  
1。  选择“工具”-“选项”  
2。  确保选项对话框(编辑器页)上的“要求变量声明”被勾选上了  
3。  点击确定关闭对话框  
从现在开始,每个新模块都会在第一行添加Option Explicit语句。如果你要在一起创建的模块里 
强制声明变量的话,你必须手动输入Option Explicit。  
技巧3-10 Option Explicit更多信息  
Option Explicit强迫正式(显式)声明模块里的所有变量。使用它的一个重大优点是,输入错误 
会在编译时(VB试图将源代码翻译为可执行代码)被检测到。Option Explicit语句必须在模块里 
的任何过程之前出现。  

9 了解变量范围  

不同的变量在VBA过程里有不同的影响范围。Scope(范围)这个术语定义某个特定的变量在同一个 
过程,其它过程,或者其它VBA工程里的可用性。变量在VBA里可以是下面三种级别的范围:  

10 过程级别(当地)变量  

从本章起,你已经知道如何通过关键字Dim来声明变量,在关键字Dim在模块中的位置决定了该变量 
的范围。在VBA过程中用Dim关键字声明的变量拥有过程级别的范围,过程级别的变量经常被称为当 
地变量。当地变量只能使用在声明它的过程里面。未声明的变量总是过程级别的变量。在它的范围 
内,变量的名称必须是唯一的,这意味着你不可以在同一个过程里使用同样的名称来声明两个变量。 
然而,你可以在不同的过程里面使用同样的变量名称。换句话说,过程CalcCost里可以有slsTax 
变量,同一个模块里的过程ExpenseRep里页可以有它自己的变量slsTax,两个变量相互独立。  

                                           76 

… 页面 93…

11 模块级别变量  

当地变量有助于节省电脑内存,一旦该过程结束,该变量便立即消失,并且电脑释放该变量占用的 
内存空间。然而,在编程中,你经常需要变量在本过程结束后仍然在其它过程里可用,这种情形需 
要你改变变量的范围。你可能就需要定义一个模块级别的变量,而不是过程级别的了。要定义模块 
级别的变量的话,你必须将关键字Dim放在模块表里任何过程的上面(紧接着在关键字Option  
Explicit的下面)。例如,将slsTax设置为任何Variables模块里的过程都可以使用,按照下述方法 
声明slsTax变量:  
Option Explicit   
Dim slsTax As Single   
Sub CalcCost( )   
          
End Sub   
在上面的例子里,关键字Dim在模块的上面,紧挨着Option Explicit语句。你需要另外一个过程来 
使用变量slsTax,这样你才能查看这是如何工作的。  
1。  在代码窗口里,将变量声明行Dim slsTax As Single从Variables模块的CalcCost过程里剪切, 
    并且粘贴到该模块的上面Option Explicit语句的下面  
2。  在CalcCost过程的同一个模块里输入ExpenseRep过程代码:  
Sub ExpenseRep()   
     Dim slsPrice As Currency   
     Dim Cost As Currency   
     slsPrice = 55。99   
     Cost = slsPrice + (slsPrice * slsTax)   
     MsgBox slsTax   
     MsgBox Cost   
End Sub  
ExpenseRep过程里声明了两个货币类型的变量:slsPrice和Cost。slsPrice变量随后赋值55。99, 
slsPrice和CalcCost过程里声明的变量slsPrice是独立工作的。ExpenseRep过程计算采购的费用, 
该费用包括销售税,因为销售税和CalcCost过程里使用的是一样的,所以将slsTax变量声明为模块 
级别的变量。VB执行CalcCost过程后,变量slsTax的内容等于0。085。如果slsTax是当地变量的话, 
随着CalcCost过程的终结,变量slsTax的内容将被清空。过程ExpenseRep结束时显示两个信息框来 
输出变量slsTax和Cost的值。当你运行CalcCost后,VB清空除了slsTax之外的所有变量的内容,因 
为slsTax以被定义为模块级别的变量。一旦你试图通过运行ExpenseRep来计算价格,VB就会找到 
slsTax的值,并且将它用到计算中。  
技巧3-11 私有变量  
当你在模块级别声明变量时,除了关键字Dim之外,你还可以使用关键字Private。例如,  
Private slsTax As Single  
私有变量仅仅在声明该变量的模
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!