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

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

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



           Cities(3)  Boston                                Lotto(3)  31  
           Cities(4)  Washington                            Lotto(4)  22  
           Cities(5)  New York                              Lotto(5)  11  
           Cities(6)  Trenton                               Lotto(6)  5  
  
正如你看到的,每个数组成员的内容和变量的数据类型是相匹配的。如果你想要在同一个数组里面 
储存不同数据类型的数据,那么你必须将数据声明为Variant。  
二维数组是由行和列代表的数据表。表中每个成员的位置是由它的行和列号码决定的。下面是一个 
空的二维数组的图解。  
  
     行号  1          2          3           列号  
        1  (1;1)      (1;2)       (1;3)        
        2  (2;1)      (2;2)      (2;3)         
        3  (3;1)      (3;2)      (3;3)         
        4  (4;1)      (4;2)      (4;3)        
        5  (5;1)      (5;2)      (5;3)         
  
注意,二维数组里的项目是如何有行和列索引指定的?在该图解里,数组里的第一个成员位于第一 
行和第一列里(1;1),而最后一个成员则位于第五行和第三列里的(5;3)。下面,我们来给该数组填 
充一些数据。下面显示的二维数组储存了国家名称,它的货币名称以及和美元的汇率。  
Japan         Japanese Yen       128。2  
(1;1)         (1;2)              (1;3)  
Mexico        Mexican Peso       9。423  
(2;1)         (2;2)              (2;3)  
Canada        Canadian Dollar    1。567  
(3;1)         (3;2)              (3;3)  
Norway        Norwegian Krone    8。351  
(4;1)         (4;2)              (4;3)  

                                          123 

… 页面 140…

Hungary       Hungarian Forint   266。7  
(5;1)         (5;2)              (5;3)  
尽管VBA数组最大可以拥有60维,但是,绝大多数人发现非常困难去想象超过三维的数组。三维的 
数组是一个具有相同行数和列数的表格的集合。在三维数组里的每个成员由下面三个数据决定:行 
号,列号和表格号。  
技巧7…1 数组变量是什么?  
数组是拥有共同名称的变量的集合。一个典型的变量只能储存一个数据,然而,一个数组变量却能 
够储存大量的变量。你可以使用变量名称和索引号来指向数组中某个确定的数据。  
技巧7…2 下标变量  
数组变量的括号里的数字成为下标,而每个单独的变量则称为下标变量或成员。例如,cities(6) 
是cities数组里的第六个下标变量(成员)。  

2。声明数组  

因为数组也是变量,所以,你必须用声明其它变量的类似方法声明数组——使用Dim语句。当你声 
明一个数组时,你便设定了该数组储存数据所需要的内存空间。  
我们来看看一个数组声明的例子:  
Dim cities(6) As String   
Dim daysOfWeek(7) As String   
Dim lotto(6) As Integer   
Dim exchange(5; 3) As Variant   
注意,变量名称后面带有括号以及括号里有数字。一维数组要求括号里带一个数字,这个数字决定 
了这个数组能够储存的最大成员数。二维数组后面总是带有两个数字——第一个数字是行索引号, 
而第二个数字是列索引号。在上面的例子里,数组exchange最多可以储存15个数据(5*3=15)。  
数组声明的最后一部份是定义数组将要储存数据的数据类型。数组可以储存下列任何一种数据类 
型:Integer; Long; Single; Double; Variant; Currency; String; Boolean; Byte; or Date。  
当你声明了一个数组,VB会自动占据足够的内存空间,分配的内存空间取决于该数组的大小和数据 
类型。当你声明一个名叫lotto的带有6个成员的一维数组时,VB将留出12个字节——数组的每个成 
员各占2个字节(回想整型数据类型为2个字节,因此2*6=12)。数组越大,储存数据需要的内存空 
间就越大。因为数组会吃掉很多内存,并因此影响你电脑的运行,因此,建议你仅仅根据你可能使 
用的成员数来声明数组。  

3。数组的上界和下界  

VBA默认将数组的第一个成员设置为0(译者:索引号),因此,数字1代表数组中的第二个成员,而 
数字2则代表第三个,等等。因为数字编号起始于0,所以,一维数组cities(6)包含从0到6的七个 
成员。如果你宁愿从1开始计数你数组里的成员,那么你可以使用Option Base 1语句来强制指定该 
数组的下界。该指令必须置于VBA模块任何Sub语句上面的声明部分。如果你不明确Option Base 1, 
那么VBA在使用数组是就会假定使用Option Base 0来从0开始编号你的数组成员。  
你也可以让数组从除0或1之外的数字开始编号,要达到该目的,你在声明数组变量时就必须明确该 
数组的边界。数组的边界是指它最小和最大的索引号。我们来看看下面的例子:  
Dim cities(3 To 6) As Integer   
上面的语句声明了一个带有四个成员的一维数组。数组名称后面括号里的数字明确了数组的下界 
 (3)和上界(6)。该数组的第一个成员编号为3,第二个为4,第三个为5,以及第四个为6。注意 
下界和上界之间的关键字To。  
技巧7…3 数组范围  
Dim语句明确的数组的下标区间就称为数组的范围,例如:Dim mktgCodes(5 To 15)  

4。在 VBA 过程里使用数组  

你声明了数组后,就必须给该数组的每个成员赋值,这也经常成为“填充数组”。我们来尝试使用 
一维数组有规划地显示六个美国城市的清单:  
1。  打开一个新工作簿,并保存为Chap07。xls  
2。  切换到VB编辑器窗口,并重新命名VBA工程为Tables  

                                          124 

… 页面 141…

3。  插入一新模块,重新命名为StaticArrays  
4。  输入下列过程FavoriteCities:  
' start indexing array elements at 1 从1开始给数组成员编号  
Option Base 1   
Sub FavoriteCities()   
'now declare the array   
Dim cities(6) As String   
'assign the values to array elements   
cities(1) = 〃Baltimore〃   
cities(2) = 〃Atlanta〃   
cities(3) = 〃Boston〃   
cities(4) = 〃Washington〃   
cities(5) = 〃New York〃   
cities(6) = 〃Trenton〃   
'display the list of cities   
MsgBox cities(1) & Chr(13) & cities(2) & Chr(13) _   
  & cities(3) & Chr(13) & cities(4) & Chr(13) _   
  & cities (5) & Chr(13) & cities(6)   
End Sub   
在FavoriteCities过程开始之前,缺省的索引编号方式改变了,注意,Option Base 1语句是位于 
模块窗口Sub语句之上的。该语句告诉VB给数组的第一个成员赋值数字1,而不是缺省的0。  
数组cities()声明为带六个成员的字符串类型变量。然后,给数组的每个成员都赋上了值。最后的 
语句使用Msgbox函数显示城市清单。当你运行该过程时,城市名称将会出现在分开的行上(参见图 
7…1)。你可以改变显示数据的顺序,改变索引号。  

                     
图7…1 你可以用Msgbox函数来显示一维数组的成员  
5。  运行FavoriteCities过程并且检查结果  
6。  修改FavoriteCities过程,让它逆序显示城市名称(从6到1)  
技巧7…4 数组成员的初始值  
在给数组成员赋值之前,该成员具有缺省值。数字变量的缺省值为0,而字符串变量的缺省值为空 
字符串。  

5。数组和循环语句  

现在要执行一些例如填充数组或显示数组成员的任务了,你在第六章里学过的好些个循环语句(参 
见For…Next和For Each …Next循环)就变得非常方便了。现在是时候将你所学到的技巧结合起来 
使用了。如何重新编写FavoriteCities过程,让每个城市名称在不同的信息框里显示出来?  
下面显示的过程FavoriteCities2将原来过程的最后部分取代为For Each…Next循环:  
Sub FavoriteCities2()   
  'now declare the array   
  Dim cities(6) As String   
  Dim city As Variant   
  'assign the values to array elements   

                                          125 

… 页面 142…

  cities(1) = 〃Baltimore〃   
  cities(2) = 〃Atlanta〃   
  cities(3) = 〃Boston〃   
  cities(4) = 〃Washington〃   
  cities(5) = 〃New York〃   
  cities(6) = 〃Trenton〃   
  'display the list of cities in separate messages   
  For Each city in cities   
       MsgBox city   
  Next   
End Sub  
注意For Each…Next循环使用的是Variant数据类型的变量city。回想在前面的章节里,For  
Each…Next让你在一个集合的所有对象间或者一个数组的所有的成员间循环,并且对每个对象或成 
员执行同样的操作。当你运行过程FavoriteCities2时,数组里有几个成员循环就会执行几次。  
我们来看一下过程FavoriteCities的另一种变化。在第四章里,你练习了将参数作为变量传递给子 
过程和函数。过程FavoriteCities3示范了如何将数组的成员传递给另一个过程。  
1。  在当前模块里,输入下
返回目录 上一页 下一页 回到顶部 赞(2) 踩(3)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!