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

excel_vba_编程教程(完整版)-第26部分

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



型),但是,如果这是在一个简短的程序里,使用Variant的代价也是难以觉察的。  
技巧3-6 变量类型是什么?  
通过下述方法,你可以快速地查明你程序里使用的变量的类型:在变量名称上单击右键,并且从快 
捷菜单上选择“快速信息”。  
技巧3-7 串联  
你可以将两个或多个字符串结合成为一个新的字符串。这个操作称为串联。你已经在AgeCalc和 
HowManyCellss过程里看到了串联的例子。串联用&符号在表示。例如,“His name is ” & FirstName 
将会产生下述字符串:His name is John,或者His name is Michael。人名取决于变量FirstName 
的内容。注意,在is和结束引号之间有一个空格。字符串的串联也可以使用加号(+)来代表,然 
而,许多程序员为了消除混淆,宁愿将加号限制于数字的运算。  

6 明确变量的数据类型  

如果你在Dim语句里没有明确变量的数据类型,你最终将得到没有归类的变量。没有归类的包括, 
在VBA里,总是当成Variant数据类型。高度建议你产生归类了的变量。当你声明变量为某种数据类 
型,你的VBA程序会运行得更快一些,因为VB不需要停下来分析Variant变量到底是什么类型。  
VB可以使用很多种数字变量。Integer变量只能保存从–32;768到32;767之间的所有整数。其它类 
型的数字变量有Long,Single,Double和Currency。Long变量可以保存从–2;147;483;648到 
2;147;483;647范围的所有整数。与Integer和Long相反,Single和Double变量可以保存小数。String 
变量用来引用文本。当你声明了一个String数据类型的变量时,你最好告诉VB这个字符串有多长, 
例如:  
Dim extension As String * 3  
声明变量extension字符串的长度为3个字符。如果你不给它分配一个明确的长度,这个字符串变量 
将是动态的。这意味着VB将会占用足够大的电脑内存来处理任意容量的文本。声明了变量后,你只 
能保存声明语句里显示的信息类型。给数字类型的变量赋文本值,或给文本类型变量赋数字值,都 
会导致“类型不匹配”的错误信息,或者导致VB修正该值。例如,如果你的变量声明为保存整数, 
而你的数据是小数, 那么VB会忽略小数部分而只用数据的整数部分。试验一下下面的MyNumber过 
程,看看VB是如何修正数据以适合变量数据类型的:  
Sub MyNumber()   
        Dim myNum As Integer   
        myNum = 23。11   
        MsgBox myNum   
End Sub  
如果你不用Dim语句声明变量,你通过在变量名称后面加上一个特殊字符同样可以指明该变量的类 
型。例如下面,你可以在变量名称后面附上美元()符号,来指明变量FirstName为字符串类型 
 (String):  
Dim FirstName  

                                                72 

… 页面 89…

上面的声明和Dim FirstName As String是一样的。其它类型的声明字符列在表3-2里面。  
表3-2 类型声明字符  
数据类型                      字符  
Integer                       %  
Long                          &  
Single                         !  
Double                        #  
Currency                      @  
String                          
  
注意,类型声明字符只能用于六种数据类型。将这些字符附在变量名称后面就可以使用这些类型声 
明字符了。过程AgeCalc2示范表3-2中类型声明字符的使用情况:  
Sub AgeCalc2()   
       'variable declaration (变量声明)  
       Dim FullName   
       DateOfBirth As Date   
       Dim Age%   
       'assign values to variables (给变量赋值)  
       FullName = 〃John Smith〃   
       DateOfBirth = #01/03/1967#   
       'calculate age (计算年龄)  
       Age% = Year(Now())…Year(DateOfBirth)   
       'print results to the Immediate window (在立即窗口里输出结果)  
       Debug。Print FullName & 〃 is 〃 & Age% & 〃 years old。〃   
End Sub   
技巧3-8 声明变量类型  
变量类型可以用As后面的关键字来标示,也可以用后面附加的类型符号来标示。如果你既不加类型 
符号也不使用As命令,那么这个变量将为默认的类型,那就是VBA中的Variant类型。  

7 变量赋值  

既然你已经知道如何命名和声明变量了,是时候开始使用它们了。我们以学习如何创建变量开始。 
在VB中,你可以在你程序的任何地方创建变量,只有给它赋个值就行。  
1。  打开一个新工作簿并且保存为Chap03。xls  
2。  激活VB编辑器窗口  
3。  在工程浏览器窗口,选择这个新的工程并在属性窗口里将它的名称改为Chap03  
4。  选择“插入”-“模块”在工程Chap03里面添加一个新模块  
5。  在属性窗口将该模块名Module1改为Variables  
6。  在代码窗口,输入CalcCost过程,如下面所示。这个过程基于下述假设来计算购买一个计算器 
    的价钱:计算器的价格为35美元,销售税为8。5%  
Sub CalcCost()   
       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 = slsPrice * slsTax   
       Cost = slsPrice + (slsPrice * slsTax)   
       With Range(〃B6〃)   

                                           73 

… 页面 90…

              。Formula = Cost   
              。NumberFormat = 〃0。00〃   
       End With   
       strMsg = 〃The calculator total is 〃 & 〃〃 & Cost & 〃。〃   
       Range(〃A8〃)。Formula = strMsg   
End Sub   
过程CalcCost使用了四个变量:slsPrice,slsTax,Cost和strMsg。因为这些变量都没有显式声明, 
所以它们的数据类型都是Variant。变量slsPrice和slsTax是在过程的开始时通过给它们赋值而产 
生的,变量Cost分配的值是下面计算的结果:slsPrice + (slsPrice * slsTax)。价格的计算是使 
用变量slsPrice和slsTax提供的值来进行的。变量strMsg将信息合并为一个文本信息给用户,然后 
这个信息是在工作表的一个单元格里输入一个完整的句子。  
当你给变量赋值时,需要在变量名称后面输入一个等号,等号之后是你要输入的值。它可以是数字, 
公式或者带引号的文本。赋给变量slsPrice,slsTax和Cost的值比较容易理解,然而保存在变量 
strMsg的值则有些棘手。我来解释一下变量strMsg的内容吧。  
strMsg = 〃The calculator total is 〃 & 〃〃 & Cost & 〃。〃  
    包括起来  
    独再在后面加上它。  
现在来运行它,将光标放在过程CalcCost的任何地方,并且选择“运行”-“运行宏”  
技巧3-9 变量初始化  
VB创建变量的时候就将其初始化了。变量假定为它们的默认值,数字型变量设置为0,布尔型变量 
初始化为False,字符串变量设置为空字符(””),已经日期型变量则设置为1899年12月30日  
注意,你在运行这个过程时,VB可能会弹出下面的信息:“编译错误:变量未定义”。如果这个情况 
发生了,点击确定以关闭这个信息框。VB将会选中变量slsPrice并且加亮过程名称Sub CalcCost, 
标题栏则显示“Microsoft Visual Basic-Chap03。xls '中断'”。VB中断模式允许你在继续之前更 
正错误。在本书的后面,你将学习如何在中断模式下解决问题。就现在而言,如果你遇到上面提及 
的错误时,通过选择“运行”-“重新设置”来退出中断模式;接下来,在代码窗口的上面删除显 
示在第一行的语句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   
   
返回目录 上一页 下一页 回到顶部 赞(0) 踩(0)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!