聲明數(shù)組
因為數(shù)組也是變量,所以,你必須用聲明其它變量的類似方法聲明數(shù)組——使用Dim語句。當你聲明一個數(shù)組時,你便設(shè)定了該數(shù)組儲存數(shù)據(jù)所需要的內(nèi)存空間。
我們來看看一個數(shù)組聲明的例子:
Dim cities(6) As String
Dim daysOfWeek(7) As String
Dim lotto(6) As Integer
Dim exchange(5, 3) As Variant
注意,變量名稱后面帶有括號以及括號里有數(shù)字。一維數(shù)組要求括號里帶一個數(shù)字,這個數(shù)字決定了這個數(shù)組能夠儲存的最大成員數(shù)。二維數(shù)組后面總是帶有兩個數(shù)字——第一個數(shù)字是行索引號,而第二個數(shù)字是列索引號。在上面的例子里,數(shù)組exchange最多可以儲存15個數(shù)據(jù)(5*3=15)。
數(shù)組聲明的最后一部份是定義數(shù)組將要儲存數(shù)據(jù)的數(shù)據(jù)類型。數(shù)組可以儲存下列任何一種數(shù)據(jù)類型:Integer, Long, Single, Double, Variant, Currency, String, Boolean, Byte, or Date。
當你聲明了一個數(shù)組,VB會自動占據(jù)足夠的內(nèi)存空間,分配的內(nèi)存空間取決于該數(shù)組的大小和數(shù)據(jù)類型。當你聲明一個名叫l(wèi)otto的帶有6個成員的一維數(shù)組時,VB將留出12個字節(jié)——數(shù)組的每個成員各占2個字節(jié)(回想整型數(shù)據(jù)類型為2個字節(jié),因此2*6=12)。數(shù)組越大,儲存數(shù)據(jù)需要的內(nèi)存空間就越大。因為數(shù)組會吃掉很多內(nèi)存,并因此影響你電腦的運行,因此,建議你僅僅根據(jù)你可能使用的成員數(shù)來聲明數(shù)組。
數(shù)組的上界和下界
VBA默認將數(shù)組的第一個成員設(shè)置為0(索引號),因此,數(shù)字1代表數(shù)組中的第二個成員,而數(shù)字2則代表第三個,等等。因為數(shù)字編號起始于0,所以,一維數(shù)組cities(6)包含從0到6的七個成員。如果你寧愿從1開始計數(shù)你數(shù)組里的成員,那么你可以使用Option Base 1語句來強制指定該數(shù)組的下界。該指令必須置于VBA模塊任何Sub語句上面的聲明部分。如果你不明確Option Base 1,那么VBA在使用數(shù)組是就會假定使用Option Base 0來從0開始編號你的數(shù)組成員。
你也可以讓數(shù)組從除0或1之外的數(shù)字開始編號,要達到該目的,你在聲明數(shù)組變量時就必須明確該數(shù)組的邊界。數(shù)組的邊界是指它最小和最大的索引號。我們來看看下面的例子:
Dim cities(3 To 6) As Integer
上面的語句聲明了一個帶有四個成員的一維數(shù)組。數(shù)組名稱后面括號里的數(shù)字明確了數(shù)組的下界(3)和上界(6)。該數(shù)組的第一個成員編號為3,第二個為4,第三個為5,以及第四個為6。注意下界和上界之間的關(guān)鍵字To。
技巧:數(shù)組范圍
Dim語句明確的數(shù)組的下標區(qū)間就稱為數(shù)組的范圍,例如:Dim mktgCodes(5 To 15)
在VBA過程里使用數(shù)組
你聲明了數(shù)組后,就必須給該數(shù)組的每個成員賦值,這也經(jīng)常成為“填充數(shù)組”。我們來嘗試使用一維數(shù)組有規(guī)劃地顯示六個美國城市的清單:
1. 打開一個新工作簿,并保存為Chap07.xls
2. 切換到VB編輯器窗口,并重新命名VBA工程為Tables
3.插入一新模塊,重新命名為StaticArrays
4.輸入下列過程FavoriteCities:
' start indexing array elements at 1 從1開始給數(shù)組成員編號
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給數(shù)組的第一個成員賦值數(shù)字1,而不是缺省的0。
數(shù)組cities()聲明為帶六個成員的字符串類型變量。然后,給數(shù)組的每個成員都賦上了值。最后的語句使用Msgbox函數(shù)顯示城市清單。當你運行該過程時,城市名稱將會出現(xiàn)在分開的行上(參見圖7-1)。你可以改變顯示數(shù)據(jù)的順序,改變索引號。
圖7-1 你可以用Msgbox函數(shù)來顯示一維數(shù)組的成員
5. 運行FavoriteCities過程并且檢查結(jié)果
6. 修改FavoriteCities過程,讓它逆序顯示城市名稱(從6到1)
技巧: 數(shù)組成員的初始值
在給數(shù)組成員賦值之前,該成員具有缺省值。數(shù)字變量的缺省值為0,而字符串變量的缺省值為空字符串。
更多建議: