VBA數(shù)組和循環(huán)語(yǔ)句

2021-12-08 14:30 更新

現(xiàn)在要執(zhí)行一些例如填充數(shù)組或顯示數(shù)組成員的任務(wù)了,你在第六章里學(xué)過(guò)的好些個(gè)循環(huán)語(yǔ)句(參見(jiàn)For…Next和For Each …Next循環(huán))就變得非常方便了?,F(xiàn)在是時(shí)候?qū)⒛闼鶎W(xué)到的技巧結(jié)合起來(lái)使用了。如何重新編寫(xiě)FavoriteCities過(guò)程,讓每個(gè)城市名稱在不同的信息框里顯示出來(lái)?下面顯示的過(guò)程FavoriteCities2將原來(lái)過(guò)程的最后部分取代為For Each…Next循環(huán):

Sub FavoriteCities2()
'now declare the array
Dim cities(6) As String
Dim city As Variant
'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 in separate messages
For Each city in cities
MsgBox city
Next
End Sub
注意For Each…Next循環(huán)使用的是Variant數(shù)據(jù)類型的變量city?;叵朐谇懊娴恼鹿?jié)里,F(xiàn)or Each…Next讓你在一個(gè)集合的所有對(duì)象間或者一個(gè)數(shù)組的所有的成員間循環(huán),并且對(duì)每個(gè)對(duì)象或成員執(zhí)行同樣的操作。當(dāng)你運(yùn)行過(guò)程FavoriteCities2時(shí),數(shù)組里有幾個(gè)成員循環(huán)就會(huì)執(zhí)行幾次。

我們來(lái)看一下過(guò)程FavoriteCities的另一種變化。在第四章里,你練習(xí)了將參數(shù)作為變量傳遞給子過(guò)程和函數(shù)。過(guò)程FavoriteCities3示范了如何將數(shù)組的成員傳遞給另一個(gè)過(guò)程。


1.  在當(dāng)前模塊里,輸入下述兩個(gè)過(guò)程:

Sub FavoriteCities3()
'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"
'call another procedure and pass the array as argument
Hallo cities()
End Sub
Sub Hallo (cities() As String)
Dim counter As Integer
For counter = 1 to 6
MsgBox "Hello " & cities(counter)
Next
End Sub
過(guò)程Hallo的聲明里有一個(gè)數(shù)組類型的參數(shù)——cities()。


2.  運(yùn)行過(guò)程FavoriteCities3。將一個(gè)子過(guò)程的數(shù)組成員傳遞給另一個(gè)子過(guò)程或者函數(shù)過(guò)程讓你可以在許多過(guò)程里使用相同的數(shù)組,而不需要重復(fù)的程序代碼。

技巧:在過(guò)程之間傳遞數(shù)組
當(dāng)一個(gè)數(shù)組在一個(gè)過(guò)程里被聲明時(shí),它是局部的,并且是不為其他過(guò)程所知的。然而,你可以將局部數(shù)組傳遞給其它的過(guò)程,通過(guò)在聲明語(yǔ)句里,寫(xiě)上數(shù)組名稱,并且后面緊跟一對(duì)空括號(hào)。例如,語(yǔ)句Hallo cities() 調(diào)用一個(gè)名叫Hallo的過(guò)程,并且將數(shù)組cities()傳遞給它。


這里有個(gè)例子,如何將你新學(xué)到的關(guān)于數(shù)組的知識(shí)和循環(huán)運(yùn)用到現(xiàn)實(shí)生活中。如果你是個(gè)狂熱的彩票玩家的話,當(dāng)你厭倦了選擇你的幸運(yùn)號(hào)碼,你可以讓VB為你選擇。下面的過(guò)程Lotto使用1到51的六個(gè)數(shù)字填充數(shù)組:

Sub Lotto()
Const spins = 6
Const minNum = 1
Const maxNum = 51
Dim t As Integer ‘looping variable in outer loop 外部循環(huán)變量
Dim i As Integer ‘looping variable in inner loop 內(nèi)部循環(huán)變量
Dim myNumbers As String ‘string to hold all picks 儲(chǔ)存選號(hào)的字符串
Dim lucky(spins) As String ‘a(chǎn)rray to hold generated picks 儲(chǔ)存產(chǎn)生的選號(hào)的數(shù)組
myNumbers = ""
For t = 1 To spins
Randomize
lucky(t) = Int((maxNum-minNum+1) * Rnd )+ minNum)
'see if this number was picked before 檢查本數(shù)字是否之前被選出來(lái)過(guò)
For i = 1 To (t-1)
If lucky(t)=lucky(i) Then
lucky(t) = Int((maxNum–minNum+1) * Rnd)+ minNum) i = 0
End If
Next i
MsgBox "Lucky number is " & t & lucky(t)
myNumbers = myNumbers & " –" & lucky(t)
Next t
MsgBox "Lucky numbers are " & myNumbers
End Sub
Randomize語(yǔ)句將隨機(jī)數(shù)字發(fā)生器初始化。指令I(lǐng)nt((maxNum-minNum+1) * Rnd + minNum)使用函數(shù)Rnd來(lái)產(chǎn)生一個(gè)在minNum和maxNum之間的隨機(jī)數(shù)值。函數(shù)Int將隨機(jī)數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)整數(shù)。除了給minNum和maxNum賦予常量之外,你也可以使用函數(shù)InputBox從用戶那里獲得數(shù)據(jù)。

內(nèi)部For…Next循環(huán)確保每個(gè)選出的數(shù)字是唯一的——它不能是之前選出的任何一個(gè)數(shù)字。如果你忽略了內(nèi)部循環(huán)并且多次運(yùn)行該過(guò)程,你很可能看到重復(fù)的號(hào)碼。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)