靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第26部分

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

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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

你可能喜欢的