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

第25部分

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

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

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



你发现工作表里有16;777;216个单元格。然而,当你在立即窗口之外的地方写VB过程时,你不能使 
用问号。当你忽略问号输入Cellsunt,VB不会突然停下来告诉你这个指令的结果。如果你想要 
知道某个指令执行后的结果,你就必须告诉VB记住它。在编程中,VB指令返回的结果可以赋值给变 
量。  

2 变量是什么  

变量是一个简单的用来引用一条数据的名称。你每次想要记住一个VBA指令的结果时,考虑用一个 
名称来代表它。例如,如果你必须用数字16;777;216来提醒你工作表中的总单元格数目,你可以使 
用一个名称,如AllCells,NumOfCells,TotalCells,等等来代替。变量名称里可以包含字母,数 
字和一些标点符号,除了下面这些之外; #  % & @ !  
变量的名称不可以以数字开始,也不可以含有空格。如果你想在变量名称里包含多于一个词语,可 
以使用下划线。虽然变量名称最多可以包含254个字母,但是,你最好使用短而简单的变量名称。 
使用短名称将会节省你的输入时间,如果你需要在你的VB过程里多次引用该变量的话。VB不管你在 
变量名称里使用大写字母还是小写字母,然而,大多数编程者使用小写字母,并且当变量名称包括 
一个或多个词语时,他们使用标题字母,那就是,象下面这样,他们将每个词语词头大写: 
NumOfCells,First_Name。(译者:中文也可以做为变量名称使用,但是,个人不建议使用中文)  
技巧3-1 不能用作变量名称的词语  
除了这些VBA占用了的词语之外,你可以使用任何你想用的标签作为变量名称。在VBA中有特定意义 
的VB语句以及其它某些词语不能用作变量名称。例如,词语Name,Len,Empty,Local, Currency 
或者Exit,如果你使用它们作为变量名,将会产生错误。  
技巧3-2 富有意义的变量名称  
给变量那种可以帮助你记住它们作用的名称。有些程序员使用前缀来识别变量类型。在你的代码中, 
一个以前缀“str”开头的变量名称(例如strName),很快就可以知道它是传递文本字符串的变量。  

3 数据类型  

当你创建VB过程时,你脑海里必然有个目的,你想要处理数据。因为你的过程要处理不同类型的信 
息,所以,你应该了解VB如何储存数据。“数据类型”这个术语决定了数据如何储存在电脑的内存 
里。例如,数据可以储存为数字,文本,日期,对象,等等。如果你忘了告诉VB你的数据类型,VB 
将分配数据类型为“Variant”。“Variant”类型有能力解决数据本身的操作类型并且使用该类型。 
表3-1里列出了VB数据类型。除了内置的数据类型之外,你还可以定义你自己的数据类型。(你将 
在第八章里看到用户自定义的数据类型的例子。)因为不同的数据类型占据电脑内存的空间是不一 
样的,一些类型比另外一些更“贵”些,因此,为了保存内存并确保你的过程运行更快,你应该选 
择占用字节最少的,同时又能够处理你数据的数据类型。  
表3-1 VBA数据类型  

                                            69 

… 页面 86…

数据类型(名称)       大小(字节) 描述  
Boolean                2            逻辑值True或False  
Byte                   1            0到255的整数  
Integer                2             –32;768到32;767的整数  
Long                   4             –2;147;483;648到2;147;483;647的整数  
Single                 4             单精度浮点数值  
                                     负数:–3。402823E38到–1。401298E–45  
                                     正数:1。401298E–45到3。402823E38  
Double                 8            双精度浮点数值  
                                     负     数      :      –1。79769313486231E308       到 
                                     –4。94065645841247E–324  
                                     正数:4。94065645841247E–324到1。79769313486231E308  
Currency               8             (放大的整数(译者:整数除以10000得到的数值,参见VBA 
                                     帮助))使用在定点计算中:  
                                     –922;337;203;685;477。5808                          到 
                                     922;337;203;685;477。5807  
Decimal                14            +/–79;228;162;514;264;337;593;543;950;335没有小数 
                                     点;  
                                     +/–7。9228162514264337593543950335小数点后有28位数 
                                     字;  
                                     最小的非0数字是  
                                     +/–0。0000000000000000000000000001  
Date                   8            从100年1月1日到9999年12月31日的日期  
String(变长字符串)  10字节+字      变长字符串最多可包含大约 20 亿 ( 2^31)个字符。  
                       符串长度  
String(定长字符串)  字符串长度   定长字符串最多可包含大约65;400 个字符。  
Object                 4             对象变量用来引用Excel中的任何对象  
Variant(带数字)      16           最高范围到Double类型的任何数值  
Variant(带字母)      22字节+字     和变长字符串的范围一样  
                       符串长度  
用户定义类型           成员所需的    每个成员的范围和它的数据类型的范围一致  
 (使用Type)          数值  
  

4 如何产生变量  

你可以通过一个专门的命令来声明变量从而产生一个变量,或者也可以直接在语句里使用变量(而 
不需要声明)。当你声明变量时,你实际上让VB知道该变量的名称和数据类型,这叫做“强制显式 
声明变量”。  
如果你在使用变量前不告诉VB关于该变量的任何信息,你这是在含蓄地告诉VBA你想要创建这个变 
量。没有明确声明的变量会自动地分配为Variant数据类型(参见表3-1)。虽然不声明变量很方便 
 (你可以随意创建变量,并且不用事先知道被赋值的数值的数据类型就可以赋值给该变量),但是, 
它会导致很多问题,参见技巧3-4中要点。  
技巧3-3 强制显式声明变量的好处  
    存  
    动更正变量名称。  
技巧3-4 隐式声明变量的坏处  

                                            70 

… 页面 87…

    要浪费很多时间来做故障排除,然而,如果在过程前声明了变量,这些很容易避免  
    运行要慢一些,因为VB每次在处理这个变量时不得不检查数据类型。因为Variant可以储存任 
    何一种数据类型,VB不得不占用更多的内存来储存你的数据  

5 如何声明变量  

你可以使用关键字Dim来声明变量,Dim代表“Dimension”。关键字Dim后面紧跟变量名称,再后面 
就是数据类型。假设你想让过程显示员工的年龄,你计算年龄之前,必须给过程提供员工的生日。 
你可以这样做,声明一个叫DateOfBirth的变量:  
Dim DateOfBirth As Date  
注意,关键字Dim之后是变量名称(DateOfBirth)。如果你不喜欢这个名称,你可以自由地改为其 
它的,只有你想用的名称不是VBA关键字之一就行。关键字As以及后面的表3-1其中的一个数据类 
型,明确了该变量的数据类型。数据类型Date告诉VB变量DateOfBirth将会储存日期。  
要储存员工的年龄,按下面方式声明变量Age:  
Dim Age As Integer  
变量Age将会储存今天和该员工生日之间年数的数字。因为年龄显示为整年,所以变量Age就被分配 
为Integer数据类型。  
你可能还想要你的程序追踪员工的姓名,因此需要声明另一个变量来保存员工的名和姓:    
Dim FullName As String  
因为词语“Name”已经在VBA占用的清单上,在你的VBA程序里使用它的话保证会有错误。将变量命 
名为FullName并且将它声明为String类型(因为员工姓名是文本),来保存员工姓名。  
技巧3-5 隐式声明变量  
没有用Dim语句来明确声明的变量叫做隐式声明。这些变量自动会被分配一个数据类型Variant。它 
们可以保存数字,字符串和其它信息类型。你可以通过在你VBA程序的任何地方,简单地赋值给一 
个变量名称来创建一个变量。例如,你可以按下述方式来隐式声明变量:DaysLeft = 100  
声明变量被认为是编程的好习惯,因为它使程序可读性增强并且帮助避免某些类型的错误。既然你 
已经知道了如何声明变量,我们就来看一下使用它的一个程序:  
Sub AgeCalc( )   
        ‘variable declaration (变量声明)  
       Dim FullName As String   
       Dim DateOfBirth As Date   
       Dim Age As Integer   
       '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  
 (译者:Debug是非常好的工具,它让对象在运行时将结果在立即窗口上显示)  
变量在程序的开始部分就被声明了,从那里开始,它们就可以使用了。在上面的过程里,每个变量 
声明在分开的行。如果你想,你也可以同时在一行里声明好几个变量,用逗号分开每个变量,例如:  
Dim FullName As String; DateOfBirth As Date; Age As Integer   
注意,关键字Dim只在变量声明行的开头出现了一次。  
当VB执行变量声明语句时,它产生了有确切名称的变量,并且占用内存空间来储存它们的值,然后, 
明确的值被赋给这些变量。如何给变量赋值?变量名称,之后是一个等号,等号的右边是你希望用 
该变量储存的数据。这里你输入的数据必须是该变量声明的数据类型。文本数据应该使用引号包括 
起来,而日期需要用井号#包括起来。VB使用DateOfBirth提供的数据来计算员工的年龄,并且将计 
算结果储存到Age这个变量。员工的姓名和年龄通过指令Debug。Print打印到立即窗口。当程序运行 

                                           71 

… 页面 88…

结束后,你必须打开立即窗口来查看结果。  
我们来看看你声明了错误的数据类型,会发生什么情况。下面的过程是计算一个工作表里的总单元 
格数目,并且将结果使用一个对话框显示给用户。  
Sub HowManyCells( )   
        Dim NumOfCells As Integer   
        NumOfCells = Cellsunt   
        MsgBox 〃The worksheet has 〃 & NumOfCells & 〃 cells。〃   
End Sub  
错误的数据类型会导致错误。在上面的过程里,当VB尝试将Cellsunt语句的结果赋给变量 
NumOfCells时失败,Excel显示信息“运行时间错误6——溢出”。这个错误的产生原因时变量的无 
效数据类型,工作表里单元格总数目不在Integer数据范围之内。要更正这个问题,你应该选择一 
个可以包含一个大数据的数据类型。然而,要快速地解决上面程序遇到的问题,你只要删除变量类 
型As Integer就行了。当你重新运行这个过程时,VB将给你的变量分配为Variant类型,尽管Variant 
比其它变量类型使用更多的内存和降低程序运行速度(因为VB不得不做额外的工作区检查变量类 
型),但是,如果这是在一个简短的程序里,使用Variant的代价也是难以觉察的。  
技巧3-6 变量类型是什么?  
通过下述方法,你可以快速地查

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的