W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
VB有兩種Do循環(huán)語句,只要或者直到某個(gè)條件為真,它們就會(huì)重復(fù)一系列的語句。只要條件為真,Do…While循環(huán)就允許你重復(fù)某個(gè)操作。這個(gè)循環(huán)的語法如下:
Do While 條件
語句1
語句2
語句N
Loop
當(dāng)VB遇到這個(gè)循環(huán)時(shí),它首先條件的真假,如果條件為假,循環(huán)內(nèi)部的語句就不會(huì)被執(zhí)行,VB將繼續(xù)執(zhí)行關(guān)鍵字Loop后面的第一條語句。如果條件為真,循環(huán)里面的語句則會(huì)被一條一條地執(zhí)行,直到遇到Loop語句。Loop語句告訴VB重復(fù)這個(gè)過程,只要Do While語句里的條件為真的話。
現(xiàn)在,我們來看看如何在Excel里面好好利用Do…While循環(huán)語句。在前面的章節(jié)里,你學(xué)習(xí)了如何根據(jù)一個(gè)單元格的內(nèi)容來作決定。讓我們?cè)龠M(jìn)一步,看看如何在一系列單元格上作同樣的決定。該決定是給一列中的非空單元格設(shè)置粗體格式。
1.打開一個(gè)空工作簿,并且命名為Chap06.xls
2.切換到VB編輯屏幕,并且將新工程改名為Repetition (Chap06.xls)
3.在工程Repetition里插入一新模塊,并重命名為DoLoops
4. 輸入如下過程:
Sub ApplyBold()
Do While ActiveCell.Value <>""
ActiveCell.Font.Bold = True
ActiveCell.Offset(1, 0).Select
Loop
End Sub
5. 在單元格A1:A7里輸入任意數(shù)據(jù)(文本或數(shù)字)
6. 選擇單元格A1
7. 選擇“工具”-“宏”-“運(yùn)行宏”。在宏對(duì)話框里,雙擊過程ApplyBold(或者選中該過程然后點(diǎn)擊運(yùn)行)
當(dāng)運(yùn)行過程ApplyBold時(shí),VB首先評(píng)估Do While語句里的條件——ActiveCell.Value<>””,該條件意思是:只要當(dāng)前單元格的值不是一個(gè)空字符串(””),就執(zhí)行下列語句。因?yàn)槟阋呀?jīng)在單元格A1里輸入了數(shù)據(jù)并且激活了該單元格(見第六步),第一個(gè)測(cè)試返回真,所以VB執(zhí)行語句ActiveCell.Font.Bold = True,它的意思是給當(dāng)前單元格設(shè)置粗體格式。接下來,VB選擇了下一行的單元格(參見第二章里的Offset屬性)。因?yàn)樵撜Z句之后就是關(guān)鍵字Loop,VB返回到Do While語句,并且再次檢查條件。如果新選中的單元格(當(dāng)前激活的單元格)不為空,那么VB就會(huì)重復(fù)循環(huán)內(nèi)部的語句。該過程會(huì)繼續(xù),直到檢查到單元格A8的內(nèi)容為空,測(cè)試條件的結(jié)果為假,因此,VB就跳過循環(huán)內(nèi)部的語句。并且在關(guān)鍵字Loop后面沒有其它的語句了,所以該過程就結(jié)束了。
我們來看看另外一個(gè)Do…While循環(huán)的例子。是不是很想知道如何在Excel的狀態(tài)欄里顯示今天的日期和時(shí)間?這里有個(gè)例子,如何讓它顯示十秒鐘:
Sub TenSeconds()
Dim stopme
stopme = Now + TimeValue("00:00:10")
Do While Now < stopme
Application.DisplayStatusBar = True
Application.StatusBar = Now
Loop
Application.StatusBar = False
End Sub
在上面的程序里,只要函數(shù)Now返回的時(shí)間小于變量stopme的值,Do…While循環(huán)里的語句就會(huì)被執(zhí)行。變量stopme儲(chǔ)存值為當(dāng)前時(shí)間加上十秒(參見在線幫助里的另外一個(gè)使用內(nèi)置函數(shù)TimeValue的例子)。
語句Application.DisplayStatusBar告訴VB打開狀態(tài)欄的顯示,下條語句則是將當(dāng)前日期和時(shí)間放在狀態(tài)欄上。當(dāng)顯示時(shí)間時(shí)(只顯示10秒)用戶無法使用系統(tǒng)(光標(biāo)變成了沙漏)。十秒鐘后(也就是,當(dāng)條件Now < stopme為真),VB跳出循環(huán)并且執(zhí)行關(guān)鍵字Loop后面的語句,該語句將狀態(tài)欄返回到默認(rèn)信息“就緒”。
技巧:什么是循環(huán)?
循環(huán)是一種導(dǎo)致一部分程序代碼重復(fù)執(zhí)行的編程結(jié)構(gòu)。VBA提供了多種結(jié)構(gòu)在你的過程里執(zhí)行循環(huán):
Do…While, Do…Until, For…Next, For…Each, and While…Wend
Do…While循環(huán)還有另外一種語法,你可以在循環(huán)的底部測(cè)試條件,例如:
Do
語句1
語句2
語句N
Loop While 條件
當(dāng)你在循環(huán)的底部測(cè)試條件時(shí),意味著循環(huán)里面的語句至少運(yùn)行了一次??匆幌逻@個(gè)例子:
Sub SignIn()
Dim secretCode As String
Do secretCode = InputBox("Enter your secret code:")
If secretCode = "sp1045" Then Exit Do
Loop While secretCode <> "sp1045"
End Sub
注意,在條件被測(cè)試之時(shí),VB至少已經(jīng)執(zhí)行了一次循環(huán)里的語句。除了將條件放在循環(huán)之后外,過程SignIn示范如何使用條件跳出循環(huán)。當(dāng)Exit Do語句執(zhí)行時(shí),循環(huán)便立即停止。
技巧:避免無限循環(huán)
如果你沒有正確地設(shè)計(jì)你的循環(huán),你將導(dǎo)致一無限循環(huán)——永無休止的循環(huán)。你將無法使用Esc鍵來停止該循環(huán)。在下面的過程里,因?yàn)橛脩敉朔胖脺y(cè)試條件而導(dǎo)致了永無休止的循環(huán):
Sub SayHello()
Do
MsgBox "Hello."
Loop
End Sub
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: